saltstack介绍
saltstack(官网saltstack.com,官方文档docs.saltstack.com )基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能
saltstack安装
A机器(服务器):192.168.234.128
B机器(客户端):192.168.234.130
设置两台机器的hostname:
hostnamectl set-hostname linux01
hostnamectl set-hostname linux02
分别修改两台机器的hosts文件:
[root@linux01 ~]# vim /etc/hosts
添加以下内容:
192.168.234.128 linux01
192.168.234.130 linux02
分别在两台机器安装saltstack yum源:
[root@linux01 ~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm
#该yum源只适合centos7系统Python2版本
centos7系统Python3版本:https://repo.saltstack.com/py3/redhat/salt-py3-repo-latest.el7.noarch.rpm
centos8:https://repo.saltstack.com/py3/redhat/salt-py3-repo-latest.el8.noarch.rpm
在服务端安装salt-master和salt-minion:
[root@linux01 ~]# yum -y install salt-master salt-minion
在客户端安装salt-minion:
[root@linux02 ~]# yum -y install salt-minion
#当有多台机器时,要批量操作的机器都需安装salt-minion,类似于zabbix的zabbix-agent包
分别在客户端和服务端编辑配置文件:
[root@linux01 ~]# vim /etc/salt/minion
添加以下内容:
master: linux01
#注意hostname前要有一个空格
在客户端启动服务:
[root@linux02 ~]# systemctl start salt-minion
在服务端启动服务:
[root@linux01 ~]# systemctl start salt-master salt-minion
在服务端查看监听端口:
[root@linux01 ~]# netstat -lntp|grep python
tcp 0 0 0.0.0.0:4505 0.0.0.0:* LISTEN 14057/python
tcp 0 0 0.0.0.0:4506 0.0.0.0:* LISTEN 14063/python
#4505为消息发布的端口,4506为和客户端通信的端口,客户端虽然是通过tcp与服务端通信,但是客户端不监听任何端口
saltstack认证配置
1.master端和minion端通信需要建立一个安全通道,传输过程需要加密,所以得配置认证,也是通过密钥对来加密解密的
2.minion在第一次启动时会在/etc/salt/pki/minion/下生成minion.pem和minion.pub,其中.pub为公钥,它会把公钥传输给master
3.master第一次启动时也会在/etc/salt/pki/master下生成密钥对,当master接收到minion传过来的公钥后,通过salt-key工具接受这个公钥,一旦接受后就会在/etc/salt/pki/master/minions/目录里存放刚刚接受的公钥,同时客户端也会接受master传过去的公钥,把它放在/etc/salt/pki/minion目录下,并命名为minion_master.pub
在服务端查看所有minion的hostname:
[root@linux01 ~]# salt-key
Accepted Keys:
Denied Keys:
Unaccepted Keys:
linux01
linux02
Rejected Keys:
认证指定主机:
[root@linux01 ~]# salt-key -a linux01
The following keys are going to be accepted:
Unaccepted Keys:
linux01
Proceed? [n/Y] y
Key for minion linux01 accepted.
[root@linux01 ~]# salt-key
Accepted Keys:
linux01
Denied Keys:
Unaccepted Keys:
linux02
Rejected Keys:
#主机linux01认证后就到了Accepted Keys分类中
salt-key工具参数说明:
参数 | 说明 |
---|---|
-A | 认证所有主机 |
-a | 后面跟主机名,认证指定主机 |
-r | 跟主机名,拒绝指定主机 |
-R | 拒绝所有主机 |
-d | 跟主机名,删除指定主机认证 |
-D | 删除全部主机认证 |
-y | 省略掉交互,相当于直接按了y |
补充:使用-r参数拒绝主机时,只能拒绝Unaccepted Keys分类中的主机,如果要拒绝Accepted Keys分类中的主机或删除Rejected Keys分类中的主机使用-d参数即可,当主机删除后,需要在对应的机器重启salt-minion服务才会在服务端salt-key工具的Unaccepted Keys分类中显示
saltstack远程执行命令
检测所有机器通信是否正常:
[root@linux01 ~]# salt '*' test.ping
linux02:
True
linux01:
True
#True表示正常,*号表示所有已认证的minion端
cmd.run执行命令:
[root@linux01 ~]# salt '*' cmd.run 'uptime'
linux02:
18:01:02 up 18:55, 1 user, load average: 0.01, 0.07, 0.17
linux01:
18:01:02 up 1 day, 2:36, 2 users, load average: 0.72, 0.43, 0.43
在指定的机器执行命令:
[root@linux01 ~]# salt 'linux02' cmd.run 'head -1 /proc/cpuinfo'
linux02:
processor : 0
#在指定的机器执行命令,直接输入主机名即可
补充:这里的*号必须是在master上已经被接受过认证的客户端,可以通过salt-key查到;关于这部分内容,它支持通配、列表以及正则。 比如两台客户端linux01、linux02 那就可以写成salt 'linux0*'或者salt ‘linux-0[12]’ ,使用列表需要加-L参数:salt -L ‘linux01,linux02’ ,使用正则需要使用-E参数:salt -E ‘linux(01|02)’