自動化批量管理工具salt-ssh - 運維小結

 

根據以往運維工做中操做經驗來講,當管理上百臺上千臺服務器時,選擇一款批量操做工具是及其有必要的。
早期習慣於在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利器,用過一段時間,該有的都有的,非常強大。html

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進行密碼交互的。node

下面就對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-sshpython

2)配置使用
能夠把要執行的信息,好比ip,賬號,密碼,端口等都放到一個文件裏面。固然文件路徑是能夠隨便定義的,官方是指定到了/etc/salt/roster。以下:
[root@linux-node1 ~]# cat /etc/salt/rosterlinux

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'web

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/rosterbash

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
相關文章
相關標籤/搜索