zoukankan      html  css  js  c++  java
  • 自动化批量管理工具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利器,用过一段时间,该有的都有的,很是强大。

    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
  • 相关阅读:
    49. 字母异位词分组
    73. 矩阵置零
    Razor语法问题(foreach里面嵌套if)
    多线程问题
    Get json formatted string from web by sending HttpWebRequest and then deserialize it to get needed data
    How to execute tons of tasks parallelly with TPL method?
    How to sort the dictionary by the value field
    How to customize the console applicaton
    What is the difference for delete/truncate/drop
    How to call C/C++ sytle function from C# solution?
  • 原文地址:https://www.cnblogs.com/kevingrace/p/6379141.html
Copyright © 2011-2022 走看看