1.salt-ssh介紹
salt-ssh可以讓我們不需要在受控機(jī)上安裝salt-minion客戶(hù)端也能夠?qū)崿F(xiàn)管理操作。
salt-ssh的特點(diǎn)
- 遠(yuǎn)程系統(tǒng)需要Python支持,除非使用-r選項(xiàng)發(fā)送原始ssh命令
- salt-ssh是一個(gè)軟件包,需安裝之后才能使用,命令本身也是salt-ssh
- salt-ssh不會(huì)取代標(biāo)準(zhǔn)的Salt通信系統(tǒng),它只是提供了一個(gè)基于SSH的替代方案,不需要ZeroMQ和agent
salt-ssh遠(yuǎn)程管理的方式
salt-ssh有兩種方式實(shí)現(xiàn)遠(yuǎn)程管理,一種是在配置文件中記錄所有客戶(hù)端的信息,諸如 IP 地址、端口號(hào)、用戶(hù)名、密碼以及是否支持sudo等;另一種是使用密鑰實(shí)現(xiàn)遠(yuǎn)程管理,不需要輸入密碼。
salt-ssh管理
注意通過(guò)salt-ssh來(lái)管理不需要安裝minion端
若沒(méi)有salt源需要去官網(wǎng)下載salt的源
下載地址
在 master 上安裝 salt-ssh
[root@master ~]# yum -y install salt-ssh
通過(guò)使用用戶(hù)名密碼的SSH實(shí)現(xiàn)遠(yuǎn)程管理
// 修改配置文件,添加受控機(jī)信息
[root@master ~]# vim /etc/salt/roster // 此文件也是遵循yaml文件的格式
[root@master ~]# tail -4 /etc/salt/roster //在文件的最后一行添加下面的內(nèi)容
node1:
host: 192.168.182.142 //要控制主機(jī)的IP
user: root //哪個(gè)用戶(hù)
passwd: 1 //密碼
//若有多臺(tái)主機(jī)可以使用以下方法
[root@master ~]# cat host.info //編寫(xiě)一個(gè)主機(jī)清單
1 192.168.182.142
2 192.168.182.143
3 192.168.182.131
[root@master ~]# cat test.sh //將主機(jī)清單中的內(nèi)容追加其中
#!/bin/bash
while read line;do
cat >> /etc/salt/roster << EOF
node$(echo $line | awk '{print $1}'):
host: $(echo $line | awk '{print $2}')
user: root
passwd: 1
EOF
done < host.info
測(cè)試連通性
[root@master ~]# salt-ssh -r node1 ls //可以通過(guò)命令的方式到對(duì)端執(zhí)行。
node1:
----------
retcode:
0
stderr:
stdout:
root@192.168.182.142's password:
anaconda-ks.cfg
[root@master ~]# salt-ssh -r node1 "yum -y install python3" //安裝python3后就可以不用使用-r命令,并且可以使用模塊進(jìn)行操作
node1:
----------
retcode:
0
stderr:
stdout:
root@192.168.182.142's password:
Updating Subscription Management repositories.
Unable to read consumer identity
此處省略N行
[root@master ~]# salt-ssh node1 test.ping
node1:
True
若出現(xiàn)下面的情況可以使用此方法
[root@master ~]# vim ~/.ssh/config
StrictHostKeyChecking no //加入此行內(nèi)容,可以跳過(guò)主機(jī)驗(yàn)證
原因是第一次連接時(shí)系統(tǒng)需要我們進(jìn)行主機(jī)驗(yàn)證。
ECDSA key fingerprint is SHA256:Nz8CAwwL3HRh/Lvqejqa+eiV3A09xGYYfG2A/W8wRPs.
ECDSA key fingerprint is MD5:8c:b3:22:14:7a:8a:bc:34:f9:9d:3c:3a:07:8a:96:20.
Are you sure you want to continue connecting (yes/no)?
也可以使用免密的登錄的方式進(jìn)行連接
上面的方法容易導(dǎo)致密碼泄露,這樣會(huì)造成不必要的麻煩
[root@master salt]# ssh-keygen -t rsa //一路回車(chē)即可
[root@master salt]# ssh-copy-id root@192.168.182.142 //寫(xiě)對(duì)端主機(jī)的IP。
在主機(jī)清單中添加對(duì)應(yīng)的IP和主機(jī)名
[root@master files]# tail -1 /etc/hosts
192.168.182.142 node1
測(cè)試
[root@master salt]# salt-ssh node1 test.ping //第一次連接時(shí)會(huì)讓你輸入密碼進(jìn)行驗(yàn)證,此后就不需要密碼
Permission denied for host node1, do you want to deploy the salt-ssh key? (password required):
[Y/n] Y
Password for root@node1:
[root@master salt]# ssh root@192.168.182.142 'hostname'
localhost.localdomain
[root@master salt]# salt-ssh node1 test.ping
node1:
True
通過(guò)salt-ssh初始化系統(tǒng)安裝salt-minion
首先給對(duì)端提供安裝salt-minion所需要的源
[root@master files]# pwd
/srv/salt/base/init/yum/files
[root@master files]# ls
centos-7.repo centos-8.repo epel-7.repo epel-8.repo salt-7.repo salt-8.repo
[root@master yum]# cat main.sls
{% if grains['os'] == 'RedHat' %}
/etc/yum.repos.d/centos-{{ grains['osmajorrelease'] }}.repo:
file.managed:
- source: salt://init/yum/files/centos-{{ grains['osmajorrelease'] }}.repo
- user: root
- group: root
- mode: 644
{% endif %}
/etc/yum.repos.d/epel-{{ grains['osmajorrelease'] }}.repo:
file.managed:
- source: salt://init/yum/files/epel-{{ grains['osmajorrelease'] }}.repo
- user: root
- group: root
- mode: 644
/etc/yum.repos.d/salt-{{ grains['osmajorrelease'] }}.repo:
file.managed:
- source: salt://init/yum/files/salt-{{ grains['osmajorrelease'] }}.repo
- user: root
- group: root
- mode: 644
執(zhí)行此狀態(tài)文件為對(duì)端提供安裝所需要的源
[root@master ~]# salt-ssh node1 state.sls init.yum.main //如果你不在base環(huán)境下需要加上saltenv=你所在的環(huán)境
node1:
----------
ID: /etc/yum.repos.d/centos-8.repo
Function: file.managed
Result: True
Comment: File /etc/yum.repos.d/centos-8.repo updated
Started: 19:08:59.036584
Duration: 227.261 ms
Changes:
----------
diff:
New file
mode:
0644
此處省略N行
執(zhí)行時(shí)會(huì)報(bào)錯(cuò)epel8的源沒(méi)有key值驗(yàn)證需要我們進(jìn)行修改
[root@master files]# pwd
/srv/salt/base/init/yum/files
[root@master files]# head epel-8.repo
[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
# It is much more secure to use the metalink, but if you wish to use a local mirror
# place it's address here.
baseurl=https://mirrors.aliyun.com/epel/$releasever/Everything/$basearch
#metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=1
gpgcheck=1
countme=1
gpgkey=https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-8
安裝salt-minion
[root@master salt-minion]# cat main.sls
include:
- init.yum.main
salt-minion:
pkg.installed
/etc/salt/minion:
file.managed:
- source: salt://init/salt-minion/files/minion.j2
- user: root
- group: root
- mode: 644
- templte: jinja
- require:
- pkg: salt-minion
salt-minion.service:
service.running:
- enable: true
[root@master salt-minion]# salt-ssh node1 state.sls init.salt-minion.main
驗(yàn)證
// 到對(duì)端驗(yàn)證
[root@localhost salt]# pwd
/etc/salt
[root@localhost salt]# ls
cloud cloud.deploy.d cloud.profiles.d master minion pki proxy.d
cloud.conf.d cloud.maps.d cloud.providers.d master.d minion.d proxy roster
在主控端查看key值
[root@master files]# salt-key -L
Accepted Keys:
node2
node3
node4
Denied Keys:
master
Unaccepted Keys:
192.168.182.142
master
Rejected Keys:
[root@master salt-minion]# salt-key -ya 192.168.182.142 //接受key值
The following keys are going to be accepted:
Unaccepted Keys:
192.168.182.142
[root@master salt-minion]# salt 192.168.182.142 test.ping
192.168.182.142:
True