一、SaltStack 安装
SaltStack 是基于 Python 开发的,也是基于 C/S 架构,通过服务端 ( master ) 控制多台客户端 ( minion ) 实现批量操作
这里我们使用 CentOS 7 安装一个服务端 ( 192.168.119.138 ) ,两个客户端 ( 192.168.119.140,192.168.119.142 ) 来进行实验
安装服务端:
[root@localhost ~]$ yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm # 安装 SaltStack yum 源 [root@localhost ~]$ yum install -y salt-master # 安装 SaltStack 服务端 [root@localhost ~]$ systemctl start salt-master # 启动 SaltStack 服务端
安装客户端:
[root@localhost ~]$ yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm # 安装 SaltStack yum 源 [root@localhost ~]$ yum install -y salt-minion # 安装 SaltStack 客户端 [root@localhost ~]$ vim /etc/salt/minion # 编辑配置文件,指定 SaltStack 服务端地址 master: 192.168.119.138 [root@localhost ~]$ systemctl start salt-minion # 启动 SaltStack 客户端
二、SaltStack 配置认证
(1) 上面我们已经安装好了 SaltStack 服务端和客户端,但是服务端和客户端之间相互通信,还需要配置认证,通信过程是通过密钥对来进行加解密的
(2) minion 在第一次启动时,会在 /etc/salt/pki/minion/ 目录下生成密钥对,其中 minion.pem 是私钥,minion.pub 是公钥,会把公钥传给 master
(3) master 接收到 minion 发来的公钥后,我们可以通过 salt-key 命令来查看有哪些 minion 公钥过来进行认证;
(4) 如果我们把该公钥视为可信的,认证通过,那么就会存放在 /etc/salt/pki/master/minions 目录中,然后 master 会把自身的公钥发送给 minion
(5) minion 接收到 master 发来的公钥后,会存储为 /etc/salt/pki/minion/minion_master.pub,实现服务端和客户端之间相互通信
[root@localhost ~]$ salt-key -L # 查看有哪些minion公钥过来进行认证 Accepted Keys: Denied Keys: # Accepted Keys 表示已经接受的公钥 Unaccepted Keys: # Denied Keys 表示已经拒绝的公钥 192.168.119.140 # Unaccepted Keys 表示还没有被接受的公钥 192.168.119.142 # Rejected Keys 表示已经被拒绝的公钥 Rejected Keys: # Deny 是直接把包丢掉,不会有任何回应,相对粗暴点,而 Reject 则是会通知对方你的包被我拒绝了
[root@localhost ~]$ salt-key -a 192.168.119.* # 设置通过认证(Accept)
salt-key 常用参数:
-L # 列出所有未被接受的公钥 -a # 接受(Accept)指定的主机公钥,后面接主机名 -r # 拒绝(Reject)指定的主机公钥,后面接主机名 -d # 拒绝(Deny)指定的主机公钥,后面接主机名 -A # 接受(Accept)所有的主机公钥 -R # 拒绝(Reject)所有的主机公钥 -D # 拒绝(Deny)所有的主机公钥 -y # 我们在接受主机公钥时需要按y确认,加上该参数可以省略交互
三、SaltStack 远程执行命令
设置认证通过后,就可以使用 master 对多个 minion 远程执行命令了:
[root@localhost ~]$ salt '*' test.ping # 检查所有主机是否存活 [root@localhost ~]$ salt '*' cmd.run "hostname" # 对所有主机执行hostname命令