saltstack之salt-ssh(隨時更新)
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安裝目錄
我個人的設定很簡單
[[email protected] ~]# 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 [[email protected]~]#
其他內建roster
scan動態定義主機和連線引數,需要在salt-ssh --roster=scan指定roster
[[email protected] ~]# 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 [[email protected] ~]#
cache,當minion無法響應時,可以使用salt-ssh --roster cache 136 service.start salt-minion排錯。
[[email protected] ~]# 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
[[email protected] ~]# 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 [[email protected] ~]#