自动化运维工具——ansible详解(一) (3)

  上面我们已经提到过 ansible 是基于 ssh 协议实现的,所以其配置公私钥的方式与 ssh 协议的方式相同,具体操作步骤如下:

#1.生成私钥 [root@server ~]# ssh-keygen #2.向主机分发私钥 [root@server ~]# ssh-copy-id root@192.168.37.122 [root@server ~]# ssh-copy-id root@192.168.37.133

  这样的话,就可以实现无密码登录,我们的实验过程也会顺畅很多。
  注意,如果出现了一下报错:

-bash: ssh-copy-id: command not found

  那么就证明我们需要安装一个包:

yum -y install openssh-clientsansible

  把包安装上即可。

ansible 常用模块 1)主机连通性测试

  我们使用ansible web -m ping命令来进行主机连通性测试,效果如下:

[root@server ~]# ansible web -m ping 192.168.37.122 | SUCCESS => { "changed": false, "ping": "pong" } 192.168.37.133 | SUCCESS => { "changed": false, "ping": "pong" }

  这样就说明我们的主机是连通状态的。接下来的操作才可以正常进行。

2)command 模块

  这个模块可以直接在远程主机上执行命令,并将结果返回本主机。
  举例如下:

[root@server ~]# ansible web -m command -a 'ss -ntl' 192.168.37.122 | SUCCESS | rc=0 >> State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:111 *:* LISTEN 0 5 192.168.122.1:53 *:* LISTEN 0 128 *:22 *:* LISTEN 0 128 127.0.0.1:631 *:* LISTEN 0 128 *:23000 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 :::111 :::* LISTEN 0 128 :::22 :::* LISTEN 0 128 ::1:631 :::* LISTEN 0 100 ::1:25 :::* 192.168.37.133 | SUCCESS | rc=0 >> State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:111 *:* LISTEN 0 128 *:22 *:* LISTEN 0 128 127.0.0.1:631 *:* LISTEN 0 128 *:23000 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 :::111 :::* LISTEN 0 128 :::22 :::* LISTEN 0 128 ::1:631 :::* LISTEN 0 100 ::1:25 :::*

  命令模块接受命令名称,后面是空格分隔的列表参数。给定的命令将在所有选定的节点上执行。它不会通过shell进行处理,比如$HOME和操作如"<",">","|",";","&" 工作(需要使用(shell)模块实现这些功能)。注意,该命令不支持| 管道命令。
  下面来看一看该模块下常用的几个命令:

chdir       # 在执行命令之前,先切换到该目录
executable # 切换shell来执行命令,需要使用命令的绝对路径
free_form   # 要执行的Linux指令,一般使用Ansible的-a参数代替。
creates  # 一个文件名,当这个文件存在,则该命令不执行,可以
用来做判断
removes # 一个文件名,这个文件不存在,则该命令不执行

  下面我们来看看这些命令的执行效果:

[root@server ~]# ansible web -m command -a 'chdir=http://www.likecs.com/data/ ls' #先切换到/data/ 目录,再执行“ls”命令 192.168.37.122 | SUCCESS | rc=0 >> aaa.jpg fastdfs mogdata tmp web wKgleloeYoCAMLtZAAAWEekAtkc497.jpg 192.168.37.133 | SUCCESS | rc=0 >> aaa.jpg fastdfs mogdata tmp web wKgleloeYoCAMLtZAAAWEekAtkc497.jpg [root@server ~]# ansible web -m command -a 'creates=http://www.likecs.com/data/aaa.jpg ls' #如果/data/aaa.jpg存在,则不执行“ls”命令 192.168.37.122 | SUCCESS | rc=0 >> skipped, since /data/aaa.jpg exists 192.168.37.133 | SUCCESS | rc=0 >> skipped, since /data/aaa.jpg exists [root@server ~]# ansible web -m command -a 'removes=http://www.likecs.com/data/aaa.jpg cat /data/a' #如果/data/aaa.jpg存在,则执行“cat /data/a”命令 192.168.37.122 | SUCCESS | rc=0 >> hello 192.168.37.133 | SUCCESS | rc=0 >> hello 3)shell 模块

  shell模块可以在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等。

[root@server ~]# ansible web -m shell -a 'cat /etc/passwd |grep "keer"' 192.168.37.122 | SUCCESS | rc=0 >> keer:x:10001:1000:keer:/home/keer:/bin/sh 192.168.37.133 | SUCCESS | rc=0 >> keer:x:10001:10001::/home/keer:/bin/sh

  只要是我们的shell命令,都可以通过这个模块在远程主机上运行,这里就不一一举例了。

4)copy 模块

  这个模块用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限等。
  其相关选项如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyxdjz.html