简介:

salt-ssh 是通过ssh协议执行命令进行管理服务器,不需要在服务器端安装minion客户端,如时有安装minion也可以调用minion模块;salt-ssh有点类似ansible 无客户端基于ssh协议进行管理服务器.通过roser(/etc/salt/roser)配置文件.

roser配置文件格式说明

配置文件格式及说明参考官方文档
https://docs.saltstack.cn/topics/ssh/roster.html#ssh-roster
以下是本人参考翻译官方文档

<Salt ID>:       # 定义引用目标系统的标识ID
    host:        # 主机IP或域名
    user:        # 目标主机用户名
    passwd:      # 目标主机密码

    #以下是可选项
    port:                   # 主机 ssh连接端口,如果是默认22 可以省略
    sudo:                # 是否以sudo方式 执行   (True|False)
    tty:                    # 布尔类型: 如果设置为True 同时sudo也设置为True
                             # 目标主机的sudoer配置文件中 requiretty 也需要配置

    priv:                    #文件路径用ssh私钥,默认为 salt-ssh.rsa 
                                   #的私钥也可以设置为agent-forwarding 
    timeout:                   #接数字是秒,连接超时时间
    minion_opts:          #minion 目录 
    thin_dir:                  #目标存储目录. 默认存到 /tmp/salt-<hash>.
    cmd_umask:        # umask to enforce for the salt-call command. Should be in
                                 # octal (so for 0o077 in YAML you would do 0077, or 63)

salt-ssh作用使用场景

主要作用是不需要安装minion,只要ssh协议开放,即可远程执行命令,可用作拿到一批新机器,批量配置时使用,也可以直接通过salt-ssh不安装minion进行管理.

salt-ssh安装

RHEL/CentOS可以直接通过 yum安装,但前提需要安装epel扩展库
本次测试在CentOS6.8 X64(salt-master)下 且已经安装过salt-master
被管理的主机 CentOS7.2 X64

#yum install epel-release -y
#yum install salt-ssh -y
安装好检查:
rpm -qa |grep salt-ssh-*
salt-ssh-2015.5.10-2.el6.noarch

查看salt-ssh使用帮助
直接运行命令就会出现命令的使用帮助
也可以访问:https://docs.saltstack.com/en/latest/ref/cli/salt-ssh.html
#salt-ssh

salt-ssh使用实例之无minion客户端

修改配置文件来添加管理172.16.3.152主机:

#cat /etc/salt/roster |egrep -v '(^$|^#)'

web2:
  host: 172.16.3.152
  user: root
  passwd: redhat

此时就可以通过salt-ssh 命令来远程管理 web2这台主机

#salt-ssh -i web2 -r "ifconfig"
如果有多台可以使用类似 salt-ssh -i web2_* -r 匹配并执行;
如图:
salt-ssh使用说明

说明: -r 表示 调用原生shell命令;-i 表接收链接,一般第一次登录主机 时添加
类似如下提示,此时就需要加-i

web2:
    ----------
    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 '172.16.3.152 (172.16.3.152)' can't be established.
        RSA key fingerprint is cf:0b:4b:a0:30:75:fc:75:9d:f5:7c:79:76:45:55:b5.
        Are you sure you want to continue connecting (yes/no)? 

salt-ssh私钥管理远程主机(安装minion)

本实例说明:
有一台主机通过私钥无密码管理,连接端口10022,私钥为san;现在通过salt-ssh进行远程管理

配置文件:
#cat /etc/salt/roster |egrep -v '(^$|^#)'

YN_zgws:
  host: 172.16.3.152
  port: 10022
  user: san
  priv: /home/san/san

调用原生shell命令执行
#salt-ssh web2 -r "sudo ifconfig"
执行结果如图:
salt-ssh使用说明

调用minion cmd.run模块执行命令:
salt-ssh使用说明

可以看出salt-ssh在没有minion情况下可以调原生shell管理主机,有minion时可以调用minion的模块来管理主机;
salt-ssh使用ssh协议来管理无minion时很适合做初始化工作,包括安装minion端.

补充:
私钥无密码管理主机配置
在salt-ssh所在主机上执行
#ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
4b:b3:fa:cf:58:1a:3a:e2:83:cd:85:f9:da:68:2d:f6 root@web02_135
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|                 |
|     o  S        |
|    o .. +       |
|   + +  + .      |
|  . Oo+o *       |
|   ++*Eo+.o      |
+-----------------+

生成私钥 /root/.ssh/id_rsa
公钥:/root/.ssh/id_rsa.pub
切换到/root/.ssh下

同步公钥到172.16.3.152
#ssh-copy-id -i id_rsa.pub root@172.16.3.152

root@172.16.3.152's password: 
Now try logging into the machine, with "ssh 'root@172.16.3.152'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

测试无密钥登录

#hostname
web02_135
#ssh root@172.16.3.152
Last login: Fri Dec  1 15:20:18 2017 from 172.16.3.147
#hostname
web2_172_16_3_152

可以看到已经 通过私钥无密码登录成功.