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)’