ansible-shell为ansible所衍生的一个批量命令行执行工具,可以基于SSH秘钥并发执行临时任务


1、安装ansible-shell

$ sudo apt-get install python-pip
$ sudo apt-get install git
$ cd /usr/local
$ sudo git clone https://github.com/dominis/ansible-shell.git
$ sudo pip install -e ./ansible-shell

注意:如报有gcc编译错误,则检查是否安装python-dev以及pycrypto版本是否低于2.6版本
$ sudo apt-get install python-dev
$ sudo pip install pycrypto==2.6


2、配置Inventory文件

1)主机

[1] 支持主机名通配以及正则表达式,例如test[1:4].cominggo.com

[2] 支持基于非标准的ssh端口,例如test5.cominggo.com:5566

[3] 未分组的主机需要在hosts的顶部保留

[4] 支持指定变量,可对个别主机的特殊配置,如登陆用户、端口、私钥等

[5] 支持设置别名,如test2 ansible_ssh_host=10.4.2.123


2)主机组

[1] 支持嵌套组,例如[game:children]在下面的组即为game组所包含

[2] 支持指定变量,例如[game:vars]在下面指定变量


3)内置变量(Inventory)

ansible_ssh_host                # 通过ssh连接的主机IP
ansible_ssh_port                # 通过ssh连接的主机端口号
ansible_ssh_user                # 通过ssh连接的用户名
ansible_ssh_pass                # 通过ssh连接的登陆密码(需安装sshpass)
ansible_sudo_pass               # sudo用户密码
ansible_connection              # 指定ssh连接类型(local,ssh,paramiko)
ansible_ssh_private_key_file    # 通过ssh连接时使用的私钥文件
ansible_shell_type              # 指定shell解释器,默认sh
ansible_python_interpreter      # 指定python解释器(路径)
ansible\_\*\_interpreter        # 指定其他语言解释器


4)配置范例

$ sudo vim /etc/ansible/hosts
[game:children]
test
ceshi

[ceshi]
10.4.2.123
10.4.13.105

[test]
test[1:4].cominggo.com


3、修改ansible-shell程序

$ sudo vim /usr/local/ansible-shell/ansible-shell
self.options.serial = 10        # 修改执行并发,默认为2


4、ansible-shell命令行使用

$ sudo ansible-shell
root@ceshi (2)[s:10]$
用户@分组名称 (主机数)[s:并发数]$
$ sudo ansible-shell		# 进入命令行
root@ (0)[s:10]$ list groups	# 列出主机组
all
ceshi
game
ungrouped
test
root@ (0)[s:10]$ cd ceshi    # 进入ceshi主机组
root@ceshi (2)[s:10]$ list	# 列出该组的所有主机
10.4.2.123
10.4.13.105
root@ceshi (2)[s:10]$ date	# 执行date
=============== 10.4.13.105         ================
Wed Aug  8 14:48:13 CST 2014

=============== 10.4.2.144          ================
Wed Aug  8 14:52:21 CST 2014

root@ceshi (2)[s:10]$ raw mysql -uUSER -pPASSWORD -e "show databases;"      # 使用raw模块执行任意shell命令        
=============== 10.4.2.123          ================
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ceshi_db           |
| mysql              |
| performance_schema |
| test               |
+--------------------+

=============== 10.4.13.105         ================
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ceshi_db           |
| mysql              |
| performance_schema |
+--------------------+

注意:在ansible-shell命令行中避免使用与模块同名的命令,使用raw模块可以支持任意命令