zoukankan      html  css  js  c++  java
  • 008-saltstack之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利器,用过一段时间,该有的都有的,很是强大。

    1
    2
    3
    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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    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'

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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'

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    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'

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    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
  • 相关阅读:
    案例的法律分析
    被投资人“送”入看守所 z
    easyUI样式之easyui-switchbutton
    阿里大于发送短信(java)
    java Random.nextInt()方法
    DateFormatUtil格式化时间
    MessageFormat.format 字符串的模板替换
    JsonArray对象
    jsonObject关于xml,json,bean之间的转换关系
    Java 使用IE浏览器下载文件,文件名乱码问题
  • 原文地址:https://www.cnblogs.com/xuefy/p/11592220.html
Copyright © 2011-2022 走看看