{"id":4595,"date":"2022-03-27T13:37:11","date_gmt":"2022-03-27T05:37:11","guid":{"rendered":"https:\/\/egonlin.com\/?p=4595"},"modified":"2022-03-27T13:37:11","modified_gmt":"2022-03-27T05:37:11","slug":"%e7%ac%ac%e4%b8%83%e8%8a%82%ef%bc%9a%e5%b0%8f%e7%99%bd%e5%ad%a6ansible%e4%b9%8bad-hoc%e7%9a%84%e4%bd%bf%e7%94%a8","status":"publish","type":"post","link":"https:\/\/egonlin.com\/?p=4595","title":{"rendered":"\u7b2c\u4e03\u8282\uff1a\u5c0f\u767d\u5b66Ansible\u4e4bad-hoc\u7684\u4f7f\u7528"},"content":{"rendered":"<h4>\u5c0f\u767d\u5b66Ansible\u4e4bad-hoc\u7684\u4f7f\u7528<\/h4>\n<h5>\u5565\u662fad-hoc\uff1f<\/h5>\n<blockquote>\n<p>ad-hoc\u7b80\u800c\u8a00\u4e4b\u5c31\u662f\u201c\u4e34\u65f6\u547d\u4ee4\u201d\uff0c\u6267\u884c\u5b8c\u5373\u7ed3\u675f\uff0c\u5e76\u4e0d\u4f1a\u4fdd\u5b58<\/p>\n<\/blockquote>\n<h5>ad-hoc\u6a21\u5f0f\u7684\u4f7f\u7528\u573a\u666f<\/h5>\n<blockquote>\n<p>\u6bd4\u5982\u5728\u591a\u53f0\u673a\u5668\u4e0a\u67e5\u770b\u67d0\u4e2a\u8fdb\u7a0b\u662f\u5426\u542f\u52a8\uff0c\u6216\u62f7\u8d1d\u6307\u5b9a\u6587\u4ef6\u5230\u672c\u5730\uff0c\u7b49\u7b49<\/p>\n<\/blockquote>\n<h5>ad-hoc \u6a21\u5f0f\u7684\u547d\u4ee4\u4f7f\u7528<\/h5>\n<p><a href=\"https:\/\/imgchr.com\/i\/MK3NaF\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/s2.ax1x.com\/2019\/11\/10\/MK3NaF.md.jpg'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/s2.ax1x.com\/2019\/11\/10\/MK3NaF.md.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"MK3NaF.md.jpg\" \/><\/div><\/a><\/p>\n<p><strong>\u4e00\u4e2a\u5177\u4f53\u7684\u4f8b\u5b50<\/strong><\/p>\n<pre><code class=\"language-python\">#\u6279\u91cf\u67e5\u770b\u78c1\u76d8\u4fe1\u606f\n[root@m01 ~]# ansible web_group -m command -a &#039;df -h&#039; -i .\/hosts\nweb02 | CHANGED | rc=0 &gt;&gt;\n\u6587\u4ef6\u7cfb\u7edf        \u5bb9\u91cf  \u5df2\u7528  \u53ef\u7528 \u5df2\u7528% \u6302\u8f7d\u70b9\n\/dev\/sda3        18G  1.1G   17G    6% \/\ndevtmpfs        981M     0  981M    0% \/dev\ntmpfs           992M     0  992M    0% \/dev\/shm\ntmpfs           992M  9.5M  982M    1% \/run\ntmpfs           992M     0  992M    0% \/sys\/fs\/cgroup\n\/dev\/sda1      1014M  124M  891M   13% \/boot\ntmpfs           199M     0  199M    0% \/run\/user\/0\n\nweb01 | CHANGED | rc=0 &gt;&gt;\n\u6587\u4ef6\u7cfb\u7edf        \u5bb9\u91cf  \u5df2\u7528  \u53ef\u7528 \u5df2\u7528% \u6302\u8f7d\u70b9\n\/dev\/sda3        18G  1.1G   17G    6% \/\ndevtmpfs        981M     0  981M    0% \/dev\ntmpfs           992M     0  992M    0% \/dev\/shm\ntmpfs           992M  9.5M  982M    1% \/run\ntmpfs           992M     0  992M    0% \/sys\/fs\/cgroup\n\/dev\/sda1      1014M  124M  891M   13% \/boot\ntmpfs           199M     0  199M    0% \/run\/user\/0\n\n#\u6279\u91cf\u67e5\u770b\u5185\u5b58\u4fe1\u606f\n[root@m01 ~]# ansible web_group -m command -a &#039;free -m&#039; -i .\/hosts\nweb01 | CHANGED | rc=0 &gt;&gt;\n              total        used        free      shared  buff\/cache   available\nMem:           1982         143        1688           9         150        1668\nSwap:          1023           0        1023\n\nweb02 | CHANGED | rc=0 &gt;&gt;\n              total        used        free      shared  buff\/cache   available\nMem:           1982         142        1684           9         155        1666\nSwap:          1023           0        1023<\/code><\/pre>\n<p><strong>\u6ce8\u610f\uff0c\u8fd4\u56de\u7684\u7ed3\u679c\u989c\u8272\uff1a<\/strong><\/p>\n<ul>\n<li>\u7eff\u8272: \u4ee3\u8868\u88ab\u7ba1\u7406\u7aef\u4e3b\u673a\u6ca1\u6709\u88ab\u4fee\u6539<\/li>\n<li>\u9ec4\u8272: \u4ee3\u8868\u88ab\u7ba1\u7406\u7aef\u4e3b\u673a\u53d1\u73b0\u53d8\u66f4<\/li>\n<li>\u7ea2\u8272: \u4ee3\u8868\u51fa\u73b0\u4e86\u6545\u969c\uff0c\u6ce8\u610f\u67e5\u770b\u63d0\u793a<\/li>\n<\/ul>\n<h5>ad-hoc\u4e4b\u5e38\u89c1\u7684\u6a21\u5757\u4ecb\u7ecd<\/h5>\n<pre><code class=\"language-python\">command             # \u6267\u884cshell\u547d\u4ee4(\u4e0d\u652f\u6301\u7ba1\u9053\u7b49\u7279\u6b8a\u5b57\u7b26)\nshell               # \u6267\u884cshell\u547d\u4ee4\nscripts             # \u6267\u884cshell\u811a\u672c\nyum_repository      # \u914d\u7f6eyum\u4ed3\u5e93\nyum                 # \u5b89\u88c5\u8f6f\u4ef6\ncopy                # \u53d8\u66f4\u914d\u7f6e\u6587\u4ef6\nfile                # \u5efa\u7acb\u76ee\u5f55\u6216\u6587\u4ef6\nservice             # \u542f\u52a8\u4e0e\u505c\u6b62\u670d\u52a1\nmount               # \u6302\u8f7d\u8bbe\u5907\ncron                # \u5b9a\u65f6\u4efb\u52a1\nget_url             #\u4e0b\u8f7d\u8f6f\u4ef6\nfirewalld           #\u9632\u706b\u5899\nselinux             #selinux<\/code><\/pre>\n<p>ad-hoc\u7684\u6a21\u5757\u975e\u5e38\u7684\u591a\uff0c\u90fd\u662f\u4f7f\u7528python\u8fdb\u884c\u7f16\u5199\u7684\uff0c\u4f46\u662f\u6b64\u5904\u6211\u4eec\u53ea\u8bb2\u4e0a\u8ff0\u6700\u5e38\u89c1\u7684\u6a21\u5757\u5373\u53ef\uff0c\u800c\u5982\u679c\u6211\u4eec\u8fd8\u60f3\u7528\u5176\u4ed6\u7684\u4e00\u4e9b\u6a21\u5757\u7684\u8bdd\uff0c\u53ef\u4ee5\u67e5\u770bad-hoc\u7684\u5e2e\u52a9\u6587\u6863,\u5982\u4e0b<\/p>\n<pre><code class=\"language-python\">[root@m01 ~]# ansible-doc -l        # \u67e5\u770b\u6240\u6709\u6a21\u5757\u8bf4\u660e\n[root@m01 ~]# ansible-doc copy      # \u67e5\u770b\u6307\u5b9a\u6a21\u5757\u65b9\u6cd5\n[root@m01 ~]# ansible-doc -s copy   # \u67e5\u770b\u6307\u5b9a\u6a21\u5757\u53c2\u6570<\/code><\/pre>\n<p><strong>\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c31\u5bf9\u4e0a\u9762\u8fd9\u4e9b\u5e38\u89c1\u7684\u6a21\u5757\u8fdb\u884c\u8bb2\u89e3<\/strong><\/p>\n<blockquote>\n<p>command<\/p>\n<\/blockquote>\n<pre><code class=\"language-python\"># \u9ed8\u8ba4\u6a21\u5757, \u6267\u884c\u547d\u4ee4\n[root@m01 ~]# ansible web_group -a &quot;hostname&quot; -i .\/hosts<\/code><\/pre>\n<blockquote>\n<p>shell<\/p>\n<\/blockquote>\n<pre><code class=\"language-python\"># \u5982\u679c\u9700\u8981\u4e00\u4e9b\u7ba1\u9053\u64cd\u4f5c\uff0c\u5219\u4f7f\u7528shell\n[root@m01 ~]# ansible web_group -m shell -a &quot;ps -ef|grep nginx&quot; -f 50<\/code><\/pre>\n<blockquote>\n<p>script<\/p>\n<\/blockquote>\n<pre><code class=\"language-python\"># \u7f16\u5199\u811a\u672c\n[root@m01 ~]# vim \/root\/yum.sh\n#!\/usr\/bin\/bash\nyum install -y vsftpd\n\n#\u5728\u672c\u5730\u8fd0\u884c\u6a21\u5757\uff0c\u7b49\u540c\u4e8e\u5728\u8fdc\u7a0b\u6267\u884c\uff0c\u4e0d\u9700\u8981\u5c06\u811a\u672c\u6587\u4ef6\u8fdb\u884c\u63a8\u9001\u76ee\u6807\u4e3b\u673a\u6267\u884c\n[root@m01 ~]# ansible web_group -m script -a &quot;\/root\/yum.sh&quot;<\/code><\/pre>\n<blockquote>\n<p>yum<\/p>\n<\/blockquote>\n<pre><code class=\"language-python\">[root@m01 ~]# ansible web_group -m yum -a &quot;name=httpd state=present&quot;\nname                            \n    httpd                       #\u6307\u5b9a\u8981\u5b89\u88c5\u7684\u8f6f\u4ef6\u5305\u540d\u79f0\n    file:\/\/                     #\u6307\u5b9a\u672c\u5730\u5b89\u88c5\u8def\u5f84\uff08yum localinstall \u672c\u5730rpm\u5305\uff09\n    http:\/\/                     #\u6307\u5b9ayum\u6e90\uff08\u4ece\u8fdc\u7a0b\u4ed3\u5e93\u83b7\u53d6rpm\u5305\uff09\n\nstate                           #\u6307\u5b9a\u4f7f\u7528yum\u7684\u65b9\u6cd5\n    installed,present           #\u5b89\u88c5\u8f6f\u4ef6\u5305\n    removed,absent              #\u79fb\u9664\u8f6f\u4ef6\u5305\n    latest                      #\u5b89\u88c5\u6700\u65b0\u8f6f\u4ef6\u5305\n\n[root@m01 ~]# ansible-doc yum\nexclude=kernel*,foo*            #\u6392\u9664\u67d0\u4e9b\u5305\nlist=ansible                    #\u7c7b\u4f3c\u4e8eyum list\u67e5\u770b\u662f\u5426\u53ef\u4ee5\u5b89\u88c5\ndisablerepo=&quot;epel,ol7_latest&quot;   #\u7981\u7528\u6307\u5b9a\u7684yum\u4ed3\u5e93\ndownload_only=true              #\u53ea\u4e0b\u8f7d\u4e0d\u5b89\u88c5 yum install d<\/code><\/pre>\n<p><strong>\u6587\u4ef6\u7ba1\u7406\u6a21\u5757<\/strong><\/p>\n<blockquote>\n<p>copy<\/p>\n<\/blockquote>\n<pre><code class=\"language-python\"># \u63a8\u9001\u6587\u4ef6\u6a21\u5757\n[root@m01 ~]# ansible web_group -m copy -a &quot;src=\/etc\/passwd dest=\/tmp\/szk.txt&quot;\n\n# \u5728\u63a8\u9001\u8986\u76d6\u8fdc\u7a0b\u7aef\u6587\u4ef6\u524d\uff0c\u5bf9\u8fdc\u7aef\u5df2\u6709\u6587\u4ef6\u8fdb\u884c\u5907\u4efd\uff0c\u6309\u7167\u65f6\u95f4\u4fe1\u606f\u5907\u4efd\n[root@m01 ~]# ansible web_group -m copy -a &quot;src=\/etc\/passwd dest=\/tmp\/szk.txt backup=yes&quot;\n\n# \u76f4\u63a5\u5411\u8fdc\u7aef\u6587\u4ef6\u5185\u5199\u5165\u6570\u636e\u4fe1\u606f\uff0c\u5e76\u4e14\u4f1a\u8986\u76d6\u8fdc\u7aef\u6587\u4ef6\u5185\u539f\u6709\u6570\u636e\u4fe1\u606f\n[root@m01 ~]# ansible web_group -m copy -a &quot;content=&#039;szk&#039; dest=\/tmp\/szk.txt&quot;\n\nsrc             #\u63a8\u9001\u6570\u636e\u7684\u6e90\u6587\u4ef6\u4fe1\u606f\ndest            #\u63a8\u9001\u6570\u636e\u7684\u76ee\u6807\u8def\u5f84\nbackup          #\u5bf9\u63a8\u9001\u4f20\u8f93\u8fc7\u53bb\u7684\u6587\u4ef6\uff0c\u8fdb\u884c\u5907\u4efd\ncontent         #\u76f4\u63a5\u6279\u91cf\u5728\u88ab\u7ba1\u7406\u7aef\u6587\u4ef6\u4e2d\u6dfb\u52a0\u5185\u5bb9\ngroup           #\u5c06\u672c\u5730\u6587\u4ef6\u63a8\u9001\u5230\u8fdc\u7aef\uff0c\u6307\u5b9a\u6587\u4ef6\u5c5e\u7ec4\u4fe1\u606f\nowner           #\u5c06\u672c\u5730\u6587\u4ef6\u63a8\u9001\u5230\u8fdc\u7aef\uff0c\u6307\u5b9a\u6587\u4ef6\u5c5e\u4e3b\u4fe1\u606f\nmode            #\u5c06\u672c\u5730\u6587\u4ef6\u63a8\u9001\u5230\u8fdc\u7aef\uff0c\u6307\u5b9a\u6587\u4ef6\u6743\u9650\u4fe1\u606f<\/code><\/pre>\n<blockquote>\n<p>file<\/p>\n<\/blockquote>\n<pre><code class=\"language-python\">[root@m01 ~]# ansible web_group -m file -a &quot;path=\/tmp\/szk_dir state=directory&quot;\n[root@m01 ~]# ansible web_group -m file -a &quot;path=\/tmp\/szk_file state=touch mode=0555 owner=root group=root&quot;\n[root@m01 ~]# ansible web_group -m file -a &quot;src=\/tmp\/szk_dir path=\/tmp\/szk_dir_link state=link&quot;\n\n[root@m01 ~]# ansible web_group -m file -a &quot;path=\/tmp\/szk_dir state=directory owner=szk group=szk mode=0700 recurse=yes&quot;\n\npath            #\u6307\u5b9a\u8fdc\u7a0b\u4e3b\u673a\u76ee\u5f55\u6216\u6587\u4ef6\u4fe1\u606f\nrecurse         #\u9012\u5f52\u6388\u6743\nstate \n    directory   #\u5728\u8fdc\u7aef\u521b\u5efa\u76ee\u5f55\n    touch       #\u5728\u8fdc\u7aef\u521b\u5efa\u6587\u4ef6\n    link        #link\u6216hard\u8868\u793a\u521b\u5efa\u94fe\u63a5\u6587\u4ef6\n    absent      #\u8868\u793a\u5220\u9664\u6587\u4ef6\u6216\u76ee\u5f55\n    mode        #\u8bbe\u7f6e\u6587\u4ef6\u6216\u76ee\u5f55\u6743\u9650\n    owner       #\u8bbe\u7f6e\u6587\u4ef6\u6216\u76ee\u5f55\u5c5e\u4e3b\u4fe1\u606f\n    group       #\u8bbe\u7f6e\u6587\u4ef6\u6216\u76ee\u5f55\u5c5e\u7ec4\u4fe1\u606f\n<\/code><\/pre>\n<blockquote>\n<p>get_url<\/p>\n<\/blockquote>\n<pre><code class=\"language-python\">[root@m01 ~]# ansible web_group -m get_url -a &#039;url=https:\/\/mirrors.aliyun.com\/zabbix\/zabbix\/3.4\/rhel\/7\/x86_64\/zabbix-agent-3.4.0-1.el7.x86_64.rpm dest=\/tmp mode=0644&#039; -i .\/hosts\n\nurl             #\u6307\u5b9a\u4e0b\u8f7d\u5730\u5740\ndest            #\u6307\u5b9a\u4e0b\u8f7d\u7684\u76ee\u5f55\nmode            #\u6307\u5b9a\u6743\u9650\nchecksum        #\u6821\u9a8c\u52a0\u5bc6\u7b97\u6cd5\n    md5\n    sha256\n<\/code><\/pre>\n<p><strong>\u670d\u52a1\u7ba1\u7406\u6a21\u5757<\/strong><\/p>\n<blockquote>\n<p>service, systemd<\/p>\n<\/blockquote>\n<pre><code class=\"language-python\">#\u542f\u52a8crond\u5e76\u52a0\u5165\u5f00\u673a\u81ea\u542f\n[root@m01 ~]# ansible web_group -m service -a &quot;name=nginx state=started enabled=yes&quot;\n\n#\u505c\u6b62crond\u5e76\u5220\u9664\u5f00\u673a\u81ea\u542f\n[root@m01 ~]# ansible web_group -m service -a &quot;name=nginx state=stoped enabled=no&quot;\n\nname        # \u5b9a\u4e49\u8981\u542f\u52a8\u670d\u52a1\u7684\u540d\u79f0\nstate       # \u6307\u5b9a\u670d\u52a1\u72b6\u6001\n    started     #\u542f\u52a8\u670d\u52a1\n    stopped     #\u505c\u6b62\u670d\u52a1\n    restarted   #\u91cd\u542f\u670d\u52a1\n    reloaded    #\u91cd\u8f7d\u670d\u52a1\nenabled         #\u5f00\u673a\u81ea\u542f\n<\/code><\/pre>\n<p><strong>\u7528\u6237\u7ba1\u7406\u6a21\u5757<\/strong><\/p>\n<blockquote>\n<p>Ansible\u7ba1\u7406\u7528\u6237\u4e0e\u7ec4\uff0c\u901a\u5e38\u4f7f\u7528user\u3001group\u6a21\u5757<\/p>\n<p>group<\/p>\n<\/blockquote>\n<pre><code class=\"language-python\">[root@m01 ~]# ansible web_group -m group -a &quot;name=szk gid=888&quot;\n\nname            #\u6307\u5b9a\u521b\u5efa\u7684\u7ec4\u540d\ngid             #\u6307\u5b9a\u7ec4\u7684gid\nstate\n    absent      #\u79fb\u9664\u8fdc\u7aef\u4e3b\u673a\u7684\u7ec4\n    present     #\u521b\u5efa\u8fdc\u7aef\u4e3b\u673a\u7684\u7ec4\uff08\u9ed8\u8ba4\uff09\n<\/code><\/pre>\n<blockquote>\n<p>user<\/p>\n<\/blockquote>\n<pre><code class=\"language-python\">#\u521b\u5efa\u7528\u6237\u6307\u5b9auid\u548cgid\uff0c\u4e0d\u521b\u5efa\u5bb6\u76ee\u5f55\u4e5f\u4e0d\u5141\u8bb8\u767b\u9646\n[root@m01 ~]# ansible web_group -m user -a &quot;name=szk uid=888 group=888 shell=\/sbin\/nologin create_home=false&quot;\n\n#\u521b\u5efa\u7528\u6237\u5e76\u751f\u6210\u79d8\u94a5\u5bf9\n[root@m01 ~]# ansible web_group -m user -a &quot;name=szk uid=888 group=root shell=\/bin\/bash generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh\/id_rsa&quot; -i .\/hosts\nweb01 | CHANGED =&gt; {\n    &quot;ansible_facts&quot;: {\n        &quot;discovered_interpreter_python&quot;: &quot;\/usr\/bin\/python&quot;\n    },\n    &quot;changed&quot;: true,\n    &quot;comment&quot;: &quot;&quot;,\n    &quot;create_home&quot;: true,\n    &quot;group&quot;: 0,\n    &quot;home&quot;: &quot;\/home\/szk&quot;,\n    &quot;name&quot;: &quot;szk&quot;,\n    &quot;shell&quot;: &quot;\/bin\/bash&quot;,\n    &quot;ssh_fingerprint&quot;: &quot;2048 SHA256:WEMHCpSjxxqFwlzrCk1FqrPqeq6N\/SHxL1gFTSqHlGM ansible-generated on web01 (RSA)&quot;,\n    &quot;ssh_key_file&quot;: &quot;\/home\/szk\/.ssh\/id_rsa&quot;,\n    &quot;ssh_public_key&quot;: &quot;ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDRx+bCYGh4FqpKoPzyXrR8ef9GwoY6l6QEFQ0+XPynR22fd9Lbs1eUxWDm5aH4ZO8sPaI8a5xmj88Sipwl0FxlQTjD2X\/vreZNEDbwFWrbZ24VvPkfPSSWBh5SxLH6pJt8pGQpPVWuLRMx6yOOxRB1hh9bGFzQNg5z8xqzeogTOoI7cxSFZVuUb5affNj8H5mCw2nAvblV+HNhRzbMlwr+9\/EWcCWHDnlVYcELHXjpNJcyGB3VFOu1MPkmLaSTcaB73O0eRvZQkYMBePKJC44tvjHihGhvCk9rzh8qvzHxvMgoMD\/+0uKAlIwEvOyfAczb7fxllU0rDtbyPtjbuLsR ansible-generated on web01&quot;,\n    &quot;state&quot;: &quot;present&quot;,\n    &quot;system&quot;: false,\n    &quot;uid&quot;: 888\n}\nweb02 | CHANGED =&gt; {\n    &quot;ansible_facts&quot;: {\n        &quot;discovered_interpreter_python&quot;: &quot;\/usr\/bin\/python&quot;\n    },\n    &quot;changed&quot;: true,\n    &quot;comment&quot;: &quot;&quot;,\n    &quot;create_home&quot;: true,\n    &quot;group&quot;: 0,\n    &quot;home&quot;: &quot;\/home\/szk&quot;,\n    &quot;name&quot;: &quot;szk&quot;,\n    &quot;shell&quot;: &quot;\/bin\/bash&quot;,\n    &quot;ssh_fingerprint&quot;: &quot;2048 SHA256:IepfOosi2Xm8kfr4nOPAhG3fec6o8kpMnJ0\/RwN+0F8 ansible-generated on web02 (RSA)&quot;,\n    &quot;ssh_key_file&quot;: &quot;\/home\/szk\/.ssh\/id_rsa&quot;,\n    &quot;ssh_public_key&quot;: &quot;ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEcO9iDKg4X8ya\/y9E0eDelAFMp\/rxiDSzW31r+REawaQyF4oywcdIagpz0MTg2BeF2WdaYUmHmtmSTfSOMif26+R1FLcL9f9NYu3io\/0388jukcTfyN02diXWgqoKtt4Gbm8Bq8sWE4tX\/FSYl42fG6bX1AyDSMzzB7ERr2AD\/Y9KuKt7cEXDinGjqTFEXw6+x1wBHpotkUisYiZCci+1Nx4YSznVRBveZTlpxMUYmKgwkUXQIt+RoOYzjgD++0md8O7lwJGgODZkahlrf2pOQnmpS4isLi9or4N+DVnqD+cXb\/RjgJzPIJZYazgRY3vtAU9DDqm5i049x\/VxEqFj ansible-generated on web02&quot;,\n    &quot;state&quot;: &quot;present&quot;,\n    &quot;system&quot;: false,\n    &quot;uid&quot;: 888\n}\n\n#\u5c06\u660e\u6587\u5bc6\u7801\u8fdb\u884chash\u52a0\u5bc6\uff0c\u7136\u540e\u8fdb\u884c\u7528\u6237\u521b\u5efa\n[root@m01 ~]# ansible web_group -m debug -a &quot;msg={{ &#039;szk&#039; | password_hash(&#039;sha512&#039;, &#039;salt&#039;) }}&quot; -i .\/hosts\nweb01 | SUCCESS =&gt; {\n    &quot;msg&quot;: &quot;$6$salt$gaWhNcZweYlKQcLU1CqyY\/UbYqIeUffVz6ESj87aMNfMX.xYBx0Z.67wzLN\/hkkxmNut7SvkksPZ2Zlrse98m\/&quot;\n}\nweb02 | SUCCESS =&gt; {\n    &quot;msg&quot;: &quot;$6$salt$gaWhNcZweYlKQcLU1CqyY\/UbYqIeUffVz6ESj87aMNfMX.xYBx0Z.67wzLN\/hkkxmNut7SvkksPZ2Zlrse98m\/&quot;\n}\n\n#\u521b\u5efa\u7528\u6237\n[root@m01 ~]# ansible web_group -m user -a &#039;name=szk1 password=$6$salt$gaWhNcZweYlKQcLU1CqyY\/UbYqIeUffVz6ESj87aMNfMX.xYBx0Z.67wzLN\/hkkxmNut7SvkksPZ2Zlrse98m\/ create_home=true shell=\/bin\/bash&#039; -i .\/hosts\n\nuid             #\u6307\u5b9a\u7528\u6237\u7684uid\ngroup           #\u6307\u5b9a\u7528\u6237\u7ec4\u540d\u79f0\ngroups          #\u6307\u5b9a\u9644\u52a0\u7ec4\u540d\u79f0\npassword        #\u7ed9\u7528\u6237\u6dfb\u52a0\u5bc6\u7801(\u5355\u5f15\u53f7)\nshell           #\u6307\u5b9a\u7528\u6237\u767b\u5f55shell\ncreate_home     #\u662f\u5426\u521b\u5efa\u5bb6\u76ee\u5f55\n<\/code><\/pre>\n<p><strong>\u5b9a\u65f6\u4efb\u52a1\u6a21\u5757<\/strong><\/p>\n<pre><code class=\"language-python\"># \u6b63\u5e38\u4f7f\u7528crond\u670d\u52a1\n[root@m01 ~]# crontab -l\n* * * * *  \/bin\/sh \/server\/scripts\/yum.sh\n\n# \u4f7f\u7528ansible\u6dfb\u52a0\u4e00\u6761\u5b9a\u65f6\u4efb\u52a1\n[root@m01 ~]# ansible web_group -m cron -a &quot;minute=* hour=* day=* month=* weekday=*  job=&#039;\/bin\/sh \/server\/scripts\/test.sh&#039;&quot;\n[root@m01 ~]# ansible web_group -m cron -a &quot;job=&#039;\/bin\/sh \/server\/scripts\/test.sh&#039;&quot;\n\n# \u8bbe\u7f6e\u5b9a\u65f6\u4efb\u52a1\u6ce8\u91ca\u4fe1\u606f\uff0c\u9632\u6b62\u91cd\u590d\uff0cname\u8bbe\u5b9a\n[root@m01 ~]# ansible web_group -m cron -a &quot;name=&#039;cron01&#039; job=&#039;\/bin\/sh \/server\/scripts\/test.sh&#039;&quot;\n\n# \u5220\u9664\u76f8\u5e94\u5b9a\u65f6\u4efb\u52a1\n[root@m01 ~]# ansible web_group -m cron -a &quot;name=&#039;ansible cron02&#039; minute=0 hour=0 job=&#039;\/bin\/sh \/server\/scripts\/test.sh&#039; state=absent&quot;\n\n# \u6ce8\u91ca\u76f8\u5e94\u5b9a\u65f6\u4efb\u52a1\uff0c\u4f7f\u5b9a\u65f6\u4efb\u52a1\u5931\u6548\n[root@m01 scripts]# ansible web_group -m cron -a &quot;name=&#039;ansible cron01&#039; minute=0 hour=0 job=&#039;\/bin\/sh \/server\/scripts\/test.sh&#039; disabled=no&quot;\n<\/code><\/pre>\n<p><strong>\u78c1\u76d8\u6302\u8f7d\u76ee\u5f55<\/strong><\/p>\n<blockquote>\n<p>mount<\/p>\n<\/blockquote>\n<pre><code class=\"language-python\">[root@m01 ~]# ansible web_group -m mount -a &quot;src=172.16.1.31:\/data path=\/data fstype=nfs opts=defaults state=present&quot;\n\n[root@m01 ~]# ansible web01 -m mount -a &quot;src=172.16.1.31:\/data path=\/data fstype=nfs opts=defaults state=mounted&quot;\n\n[root@m01 ~]# ansible web02 -m mount -a &quot;src=172. 16.1.31:\/data path=\/data fstype=nfs opts=defaults state=unmounted&quot;\n\n[root@m01 ~]# ansible web -m mount -a &quot;src=172.16.1.31:\/data path=\/data fstype=nfs opts=defaults state=absent&quot;\n\n\u5177\u4f53\u7684\u53c2\u6570\u5982\u4e0b\uff1a\npresent     # \u5f00\u673a\u6302\u8f7d\uff0c\u4ec5\u5c06\u6302\u8f7d\u914d\u7f6e\u5199\u5165\/etc\/fstab\nmounted     # \u6302\u8f7d\u8bbe\u5907\uff0c\u5e76\u5c06\u914d\u7f6e\u5199\u5165\/etc\/fstab\nunmounted   # \u5378\u8f7d\u8bbe\u5907\uff0c\u4e0d\u4f1a\u6e05\u9664\/etc\/fstab\u5199\u5165\u7684\u914d\u7f6e\nabsent      # \u5378\u8f7d\u8bbe\u5907\uff0c\u4f1a\u6e05\u7406\/etc\/fstab\u5199\u5165\u7684\u914d\u7f6e\n<\/code><\/pre>\n<p><strong>\u9632\u706b\u5899\u6a21\u5757<\/strong><\/p>\n<blockquote>\n<p>selinux<\/p>\n<\/blockquote>\n<pre><code class=\"language-python\">#\u4fee\u6539\u914d\u7f6e\u6587\u4ef6\u5173\u95edselinux\uff0c\u5fc5\u987b\u91cd\u542f\n[root@m01 ~]# ansible web_group -m selinux -a &#039;state=disabled&#039; -i .\/hosts\n [WARNING]: SELinux state temporarily changed from &#039;enforcing&#039; to &#039;permissive&#039;. State change will take effect next reboot.\n\nweb01 | CHANGED =&gt; {\n    &quot;ansible_facts&quot;: {\n        &quot;discovered_interpreter_python&quot;: &quot;\/usr\/bin\/python&quot;\n    },\n    &quot;changed&quot;: true,\n    &quot;configfile&quot;: &quot;\/etc\/selinux\/config&quot;,\n    &quot;msg&quot;: &quot;Config SELinux state changed from &#039;enforcing&#039; to &#039;disabled&#039;&quot;,\n    &quot;policy&quot;: &quot;targeted&quot;,\n    &quot;reboot_required&quot;: true,\n    &quot;state&quot;: &quot;disabled&quot;\n}\nweb02 | CHANGED =&gt; {\n    &quot;ansible_facts&quot;: {\n        &quot;discovered_interpreter_python&quot;: &quot;\/usr\/bin\/python&quot;\n    },\n    &quot;changed&quot;: true,\n    &quot;configfile&quot;: &quot;\/etc\/selinux\/config&quot;,\n    &quot;msg&quot;: &quot;Config SELinux state changed from &#039;enforcing&#039; to &#039;disabled&#039;&quot;,\n    &quot;policy&quot;: &quot;targeted&quot;,\n    &quot;reboot_required&quot;: true,\n    &quot;state&quot;: &quot;disabled&quot;\n}\n\n#\u4e34\u65f6\u5173\u95ed\n[root@m01 ~]# ansible web_group -m shell -a &#039;setenforce 0&#039; -i .\/hosts\nweb02 | CHANGED | rc=0 &gt;&gt;\nweb01 | CHANGED | rc=0 &gt;&gt;\n\n[root@m01 ~]# ansible web_group -m shell -a &#039;getenforce&#039; -i .\/hosts\nweb02 | CHANGED | rc=0 &gt;&gt;\nPermissive\n\nweb01 | CHANGED | rc=0 &gt;&gt;\nPermissive\nfirewalld\n[root@m01 ~]# ansible web_group -m firewalld -a &#039;service=http permanent=yes state=enabled&#039; -i .\/hosts\n[root@m01 ~]# ansible web_group -m firewalld -a &quot;service=http immediate=yes permanent=yes state=enabled&quot; -i .\/hosts\n\n[root@m01 ~]# ansible web_group -m firewalld -a &quot;port=8080-8090\/tcp immediate=yes permanent=yes state=enabled&quot; -i .\/hosts\n\n\u5177\u4f53\u7684\u53c2\u6570\u5982\u4e0b\uff1a\nservice                 #\u6307\u5b9a\u5f00\u653e\u6216\u5173\u95ed\u7684\u670d\u52a1\u540d\u79f0\nport                    #\u6307\u5b9a\u5f00\u653e\u6216\u5173\u95ed\u7684\u7aef\u53e3\npermanent               #\u662f\u5426\u6dfb\u52a0\u6c38\u4e45\u751f\u6548\nstate                   #\u5f00\u542f\u6216\u8005\u5173\u95ed\n    enabled\n    disabled\n\nzone                    #\u6307\u5b9a\u914d\u7f6e\u67d0\u4e2a\u533a\u57df\nrich_rule               #\u914d\u7f6e\u8f85\u89c4\u5219\nmasquerade              #\u5f00\u542f\u5730\u5740\u4f2a\u88c5\nimmediate               #\u4e34\u65f6\u751f\u6548\nsource                  #\u6307\u5b9a\u6765\u6e90IP\n<\/code><\/pre>\n<p><strong>\u4e3b\u673a\u4fe1\u606f\u6a21\u5757<\/strong><\/p>\n<blockquote>\n<p>\u8fd9\u4e2a\u6a21\u5757\u975e\u5e38\u7684\u6709\u7528\uff0c\u56e0\u4e3a\u5728\u516c\u53f8\u7684\u65f6\u5019\uff0c\u6211\u4eec\u9700\u8981\u6536\u96c6\u4e00\u4e0b\u5404\u4e2a\u4e3b\u673a\u7684\u4e3b\u673a\u540d\uff0c\u5185\u5b58\uff0cCPU\u7b49\u8fd9\u4e9b\u4fe1\u606f\uff0c\u90a3\u6b64\u65f6\u4f7f\u7528\u8fd9\u4e2a\u6a21\u5757\u662f\u975e\u5e38\u65b9\u4fbf\u7684<\/p>\n<p>setup<\/p>\n<\/blockquote>\n<p>1.\u67e5\u770b\u6240\u6709\u8be6\u7ec6\u4fe1\u606f<\/p>\n<pre><code class=\"language-python\">[root@m01 ~]# ansible web01 -m setup\nweb01 | SUCCESS =&gt; {\n    &quot;ansible_facts&quot;: {\n        &quot;ansible_all_ipv4_addresses&quot;: [\n            &quot;10.0.0.7&quot;\n        ],\n        &quot;ansible_all_ipv6_addresses&quot;: [\n            &quot;fe80::20c:29ff:fef8:9880&quot;\n        ],\n        &quot;ansible_apparmor&quot;: {\n            &quot;status&quot;: &quot;disabled&quot;\n        },\n        &quot;ansible_architecture&quot;: &quot;x86_64&quot;,\n        &quot;ansible_bios_date&quot;: &quot;04\/13\/2018&quot;,\n        &quot;ansible_bios_version&quot;: &quot;6.00&quot;,\n        &quot;ansible_cmdline&quot;: {\n            &quot;BOOT_IMAGE&quot;: &quot;\/vmlinuz-3.10.0-862.el7.x86_64&quot;,\n            &quot;LANG&quot;: &quot;en_US.UTF-8&quot;,\n            &quot;biosdevname&quot;: &quot;0&quot;,\n            &quot;net.ifnames&quot;: &quot;0&quot;,\n            &quot;quiet&quot;: true,\n            &quot;rhgb&quot;: true,\n            &quot;ro&quot;: true,\n            &quot;root&quot;: &quot;UUID=7348b9b1-f2a7-46c6-bede-4f22224dc168&quot;\n        },\n        &quot;ansible_date_time&quot;: {\n            &quot;date&quot;: &quot;2019-09-10&quot;,\n            &quot;day&quot;: &quot;10&quot;,\n            &quot;epoch&quot;: &quot;1568115243&quot;,\n            &quot;hour&quot;: &quot;19&quot;,\n            &quot;iso8601&quot;: &quot;2019-09-10T11:34:03Z&quot;,\n            &quot;iso8601_basic&quot;: &quot;20190910T193403218395&quot;,\n            &quot;iso8601_basic_short&quot;: &quot;20190910T193403&quot;,\n            &quot;iso8601_micro&quot;: &quot;2019-09-10T11:34:03.218468Z&quot;,\n            &quot;minute&quot;: &quot;34&quot;,\n            &quot;month&quot;: &quot;09&quot;,\n            &quot;second&quot;: &quot;03&quot;,\n            &quot;time&quot;: &quot;19:34:03&quot;,\n            &quot;tz&quot;: &quot;CST&quot;,\n            &quot;tz_offset&quot;: &quot;+0800&quot;,\n            &quot;weekday&quot;: &quot;\u661f\u671f\u4e8c&quot;,\n            &quot;weekday_number&quot;: &quot;2&quot;,\n            &quot;weeknumber&quot;: &quot;36&quot;,\n            &quot;year&quot;: &quot;2019&quot;\n        },\n        &quot;ansible_default_ipv4&quot;: {\n            &quot;address&quot;: &quot;10.0.0.7&quot;,\n            &quot;alias&quot;: &quot;eth0&quot;,\n            &quot;broadcast&quot;: &quot;10.0.0.255&quot;,\n            &quot;gateway&quot;: &quot;10.0.0.2&quot;,\n            &quot;interface&quot;: &quot;eth0&quot;,\n            &quot;macaddress&quot;: &quot;00:0c:29:f8:98:80&quot;,\n            &quot;mtu&quot;: 1500,\n            &quot;netmask&quot;: &quot;255.255.255.0&quot;,\n            &quot;network&quot;: &quot;10.0.0.0&quot;,\n            &quot;type&quot;: &quot;ether&quot;\n        },\n        &quot;ansible_default_ipv6&quot;: {},\n     }<\/code><\/pre>\n<p>2.\u83b7\u53d6IP\u5730\u5740<\/p>\n<pre><code class=\"language-python\">[root@m01 ~]# ansible web01 -m setup -a &#039;filter=ansible_default_ipv4&#039;\nweb01 | SUCCESS =&gt; {\n    &quot;ansible_facts&quot;: {\n        &quot;ansible_default_ipv4&quot;: {\n            &quot;address&quot;: &quot;10.0.0.7&quot;,\n            &quot;alias&quot;: &quot;eth0&quot;,\n            &quot;broadcast&quot;: &quot;10.0.0.255&quot;,\n            &quot;gateway&quot;: &quot;10.0.0.2&quot;,\n            &quot;interface&quot;: &quot;eth0&quot;,\n            &quot;macaddress&quot;: &quot;00:0c:29:f8:98:80&quot;,\n            &quot;mtu&quot;: 1500,\n            &quot;netmask&quot;: &quot;255.255.255.0&quot;,\n            &quot;network&quot;: &quot;10.0.0.0&quot;,\n            &quot;type&quot;: &quot;ether&quot;\n        },\n        &quot;discovered_interpreter_python&quot;: &quot;\/usr\/bin\/python&quot;\n    },\n    &quot;changed&quot;: false\n}<\/code><\/pre>\n<p>3.\u83b7\u53d6\u4e3b\u673a\u540d<\/p>\n<pre><code class=\"language-python\">[root@m01 ~]# ansible web01 -m setup -a &#039;filter=ansible_fqdn&#039;\nweb01 | SUCCESS =&gt; {\n    &quot;ansible_facts&quot;: {\n        &quot;ansible_fqdn&quot;: &quot;web01&quot;,\n        &quot;discovered_interpreter_python&quot;: &quot;\/usr\/bin\/python&quot;\n    },\n    &quot;changed&quot;: false\n}<\/code><\/pre>\n<p>4.\u83b7\u53d6\u5185\u5b58\u4fe1\u606f<\/p>\n<pre><code class=\"language-python\">[root@m01 ~]# ansible web01 -m setup -a &#039;filter=ansible_memory_mb&#039;\nweb01 | SUCCESS =&gt; {\n    &quot;ansible_facts&quot;: {\n        &quot;ansible_memory_mb&quot;: {\n            &quot;nocache&quot;: {\n                &quot;free&quot;: 1622,\n                &quot;used&quot;: 360\n            },\n            &quot;real&quot;: {\n                &quot;free&quot;: 1068,\n                &quot;total&quot;: 1982,\n                &quot;used&quot;: 914\n            },\n            &quot;swap&quot;: {\n                &quot;cached&quot;: 0,\n                &quot;free&quot;: 1023,\n                &quot;total&quot;: 1023,\n                &quot;used&quot;: 0\n            }\n        },\n        &quot;discovered_interpreter_python&quot;: &quot;\/usr\/bin\/python&quot;\n    },\n    &quot;changed&quot;: false\n}<\/code><\/pre>\n<p>5.\u5176\u4ed6\u4fe1\u606f\u53c2\u6570<\/p>\n<pre><code class=\"language-python\">ansible_all_ipv4_addresses\uff1a\u4ec5\u663e\u793aipv4\u7684\u4fe1\u606f\u3002\nansible_devices\uff1a\u4ec5\u663e\u793a\u78c1\u76d8\u8bbe\u5907\u4fe1\u606f\u3002\nansible_distribution\uff1a\u663e\u793a\u662f\u4ec0\u4e48\u7cfb\u7edf\uff0c\u4f8b\uff1acentos,suse\u7b49\u3002\nansible_distribution_major_version\uff1a\u663e\u793a\u662f\u7cfb\u7edf\u4e3b\u7248\u672c\u3002\nansible_distribution_version\uff1a\u4ec5\u663e\u793a\u7cfb\u7edf\u7248\u672c\u3002\nansible_machine\uff1a\u663e\u793a\u7cfb\u7edf\u7c7b\u578b\uff0c\u4f8b\uff1a32\u4f4d\uff0c\u8fd8\u662f64\u4f4d\u3002\nansible_eth0\uff1a\u4ec5\u663e\u793aeth0\u7684\u4fe1\u606f\u3002\nansible_hostname\uff1a\u4ec5\u663e\u793a\u4e3b\u673a\u540d\u3002\nansible_kernel\uff1a\u4ec5\u663e\u793a\u5185\u6838\u7248\u672c\u3002\nansible_lvm\uff1a\u663e\u793alvm\u76f8\u5173\u4fe1\u606f\u3002\nansible_memtotal_mb\uff1a\u663e\u793a\u7cfb\u7edf\u603b\u5185\u5b58\u3002\nansible_memfree_mb\uff1a\u663e\u793a\u53ef\u7528\u7cfb\u7edf\u5185\u5b58\u3002\nansible_memory_mb\uff1a\u8be6\u7ec6\u663e\u793a\u5185\u5b58\u60c5\u51b5\u3002\nansible_swaptotal_mb\uff1a\u663e\u793a\u603b\u7684swap\u5185\u5b58\u3002\nansible_swapfree_mb\uff1a\u663e\u793aswap\u5185\u5b58\u7684\u53ef\u7528\u5185\u5b58\u3002\nansible_mounts\uff1a\u663e\u793a\u7cfb\u7edf\u78c1\u76d8\u6302\u8f7d\u60c5\u51b5\u3002\nansible_processor\uff1a\u663e\u793acpu\u4e2a\u6570(\u5177\u4f53\u663e\u793a\u6bcf\u4e2acpu\u7684\u578b\u53f7)\u3002\nansible_processor_vcpus\uff1a\u663e\u793acpu\u4e2a\u6570(\u53ea\u663e\u793a\u603b\u7684\u4e2a\u6570)\u3002<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u5c0f\u767d\u5b66Ansible\u4e4bad-hoc\u7684\u4f7f\u7528 \u5565\u662fad-hoc\uff1f ad-hoc\u7b80\u800c\u8a00\u4e4b\u5c31\u662f\u201c\u4e34\u65f6\u547d\u4ee4\u201d\uff0c\u6267\u884c\u5b8c\u5373\u7ed3 [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[352,351],"tags":[],"_links":{"self":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts\/4595"}],"collection":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4595"}],"version-history":[{"count":0,"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts\/4595\/revisions"}],"wp:attachment":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4595"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4595"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4595"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}