根據以往運維工作中操作經驗來說,當管理上百臺上千臺伺服器時,選擇一款批量操作工具是及其有必要的。
早期習慣於在ssh信任關係的前提下做for;do;done迴圈語句的批量操作,後來逐漸趨於使用批量工具操作:
1)pssh工具,它需要提前做好key關聯的ssh信任關係,比起for迴圈語句,我之前還是比較喜歡用pssh。
具體用法見於:http://www.cnblogs.com/kevingrace/p/6378719.html
2)expect 最大的有點就是互動,但是要成高效能的話,需要自己寫多執行緒的。
參考:http://www.cnblogs.com/kevingrace/p/5900303.html
3)python利器,用過一段時間,該有的都有的,很是強大。
from fabric import env env.hosts = ['user1@host1:port1', 'user2@host2.port2'] env.passwords = {'user1@host1:port1': 'password1', 'user2@host2.port2': 'password2'}
4)最後,還是比較看好salt-ssh。
salt-ssh可以獨立執行的,不需要minion端。salt-ssh可以代替expect之類的密碼推送指令碼,看起來功能不比expect差 。 salt-ssh 用的是sshpass進行密碼互動的。
下面就對salt-ssh的使用做一簡單梳理:
1)安裝
[root@bastion-IDC ~]# wget http://ftp.linux.ncsu.edu/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@bastion-IDC ~]# rpm -ivh epel-release-6-8.noarch.rpm --force
[root@bastion-IDC ~]# yum install -y salt-ssh
2)配置使用
可以把要執行的資訊,比如ip,帳號,密碼,埠等都放到一個檔案裡面。當然檔案路徑是可以隨便定義的,官方是指定到了/etc/salt/roster。如下:
[root@linux-node1 ~]# cat /etc/salt/roster
web1: host: 192.168.1.118 //前面留四個空格,冒號後空一格 user: root //前面留四個空格,冒號後空一格 password: PASSWORD //前面留四個空格,冒號後空一格 port: 22 //前面留四個空格,冒號後空一格 web2: host: 192.168.1.105 user: root password: PASSWORD port: 22 web3: host: 192.168.1.19 user: root password: K46u@!kB9G port: 25791
然後執行批量操作命令:
[第一次執行的時候,有的機器可能會提醒輸入ssh初次登入詢問yes/no,如果要去掉這個yes/no的詢問環節,只需要修改本機的/etc/ssh/ssh_config檔案中的"# StrictHostKeyChecking ask" 為 "StrictHostKeyChecking no",然後重啟sshd服務即可]
[root@linux-node1 ~]# salt-ssh "*" -r 'free -m'
web3: ---------- retcode: 254 stderr: stdout: The host key needs to be accepted, to auto accept run salt-ssh with the -i flag: The authenticity of host '192.168.1.109 (192.168.1.109)' can't be established. RSA key fingerprint is 7d:83:12:5d:85:c4:36:c9:21:41:c2:90:89:5b:0a:f5. Are you sure you want to continue connecting (yes/no)? web2: ---------- retcode: 0 stderr: stdout: total used free shared buff/cache available Mem: 3951 52 2524 20 1374 3610 Swap: 534 0 534 web1: ---------- retcode: 0 stderr: stdout: total used free shared buffers cached Mem: 3832 3617 215 0 174 1930 -/+ buffers/cache: 1511 2320 Swap: 1535 36 1499
特別注意:
salt-ssh第一次執行是根據roster檔案裡配置的賬號密碼推送密碼,來實現自動互動的。
執行完了後會在目標伺服器裡面,追加master端(即源機器)的key。
然後就可以刪除roster裡面的passwd密碼條目了,刪除roster檔案裡的密碼條目後,不影響後批量操作的執行。
如下:
把roster檔案裡的password條目刪除後,還是可以執行,這裡就不是用sshpass推送密碼了,而是直接通過key了 !!!
[root@linux-node1 ~]# cat /etc/salt/roster
web1: host: 192.168.1.118 user: root port: 22 web2: host: 192.168.1.105 user: root port: 22 web3: host: 192.168.1.19 user: root port: 25791
[root@linux-node1 ~]# salt-ssh "*" -r 'df -h'
web3: ---------- retcode: 0 stderr: stdout: Filesystem Size Used Avail Use% Mounted on udev 2.0G 0 2.0G 0% /dev tmpfs 396M 21M 375M 6% /run /dev/vda1 3.9G 2.3G 1.5G 61% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/vda6 11G 26M 9.6G 1% /home cgmfs 100K 0 100K 0% /run/cgmanager/fs tmpfs 396M 0 396M 0% /run/user/0 web1: ---------- retcode: 0 stderr: stdout: Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00 8.1G 4.8G 2.9G 63% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/vda1 190M 37M 143M 21% /boot web2: ---------- retcode: 0 stderr: stdout: Filesystem Size Used Avail Use% Mounted on udev 2.0G 0 2.0G 0% /dev tmpfs 396M 21M 375M 6% /run /dev/vda1 3.9G 2.1G 1.7G 56% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/vda6 11G 26M 9.6G 1% /home cgmfs 100K 0 100K 0% /run/cgmanager/fs tmpfs 396M 0 396M 0% /run/user/0
如下:--roster-file引數後面跟的是配置檔案,如果是官方指定的配置檔案/etc/salt/roster,則可以省略。
如果是自己自定義的檔案,則需要用這個引數指定
[root@linux-node1 ~]# salt-ssh "*" --roster-file /etc/salt/roster -r 'uptime'
web2: ---------- retcode: 0 stderr: stdout: 04:41:49 up 79 days, 15:22, 1 user, load average: 0.00, 0.00, 0.00 web1: ---------- retcode: 0 stderr: stdout: 04:41:57 up 75 days, 17:05, 3 users, load average: 0.02, 0.16, 0.20 web3: ---------- retcode: 0 stderr: stdout: 04:41:42 up 79 days, 6:42, 1 user, load average: 0.00, 0.00, 0.00