1. 程式人生 > >saltstack之salt-ssh(隨時更新)

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] ~]#