salt引入强大的消息队列作为通信传输机制,有些时候我们需要老旧的工具才更具有效果--salt ssh。
官方文档https://docs.saltstack.com/en/latest/topics/ssh/index.html
salt设计目标是一次就可以联系数量庞大的远程主机,而ssh(安全shell是Secure shell缩写)每次只允许一台主机交互。
salt-ssh使用步骤:
1.Roster(花名册)建立:
传统salt基础设施中,由minions主动链接master,master并不会存储minion的网络和主机配置。而基于ssh链接时,这个规则就需要改变,因为master必须通过ssh去链接他的minion。
Roster就是用来保存minion id和ip的。
Roster是纯文本文档,存储在/etc/salt/roster中。可以通过salt-ssh --roster-file=/etc/salt/roster '*' test.ping改变roster路径。
roster文件可增加内容有以下:
id:minion唯一标识 host:主机名称 port:ssh端口(默认22,非标准安装请指定端口) user:运行salt-ssh的默认用户是root passwd:使用密码认证 sudo:特权用户执行命令,默认False。 priv:带私钥访问minion,可通过指定路径选择密钥 timeout:等待ssh连接建立最大秒数 thin_dir: minion的salt thin agent安装目录
我个人的设置很简单
[root@Management-Machine-140 ~]# cat /etc/salt/roster 136: 192.168.146.136 137: 192.168.146.137 138: host: 192.168.146.138 user: root port: 22 passwd: 111111 timeout: 5 [root@Management-Machine-140 ~]#
其他内置roster
scan动态定义主机和连接参数,需要在salt-ssh --roster=scan指定roster
[root@Management-Machine-140 ~]# salt-ssh --roster=scan 192.168.146.0/24 test.ping 192.168.146.139: #未将sshkey中存储在ssh key agent中。 ---------- 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.146.139 (192.168.146.139)' can't be established. RSA key fingerprint is 6e:c2:82:f9:9b:dc:b6:21:8f:9f:9f:55:59:4e:72:6f. Are you sure you want to continue connecting (yes/no)? 192.168.146.136: True 192.168.146.137: True 192.168.146.138: True [root@Management-Machine-140 ~]#
cache,当minion无法响应时,可以使用salt-ssh --roster cache 136 service.start salt-minion排错。
[root@Management-Machine-140 ~]# salt-ssh --roster cache 136 service.start salt-minion
cloud,与cache类似
ansible ssh自动化平台,可自行学习
使用salt-ssh,匹配target有Glob(默认)、Perl正则-E、列表-L、Grains -G、NodeGroup -N组名、Range -R
-r 指定执行命令
-i 连接时忽略keys
[root@Management-Machine-140 ~]# salt-ssh '*' -r 'tail -1 /var/log/dmesg' 137: ---------- retcode: 0 stderr: stdout: SELinux: initialized (dev binfmt_misc, type binfmt_misc), uses genfs_contexts 138: ---------- retcode: 0 stderr: stdout: SELinux: initialized (dev binfmt_misc, type binfmt_misc), uses genfs_contexts 136: ---------- retcode: 0 stderr: stdout: SELinux: initialized (dev binfmt_misc, type binfmt_misc), uses genfs_contexts [root@Management-Machine-140 ~]#