一、安裝說明linux
操做系統版本:CentOS Linux release 7.5.1804 (Core)json
saltstack版本:2018.3.2vim
已經關閉selinux、firewalld服務。api
二、配置yum源app
編輯/etc/yum.repos.d/salt.repo,內容以下:
[salt-latest] name=SaltStack Latest Release Channel for RHEL/Centos $releasever baseurl=https://mirrors.aliyun.com/saltstack/yum/redhat/7/$basearch/latest failovermethod=priority enabled=1 gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/saltstack-signing-key
三、安裝salt-master、salt-minion、salt-apicurl
yum install salt-master salt-minion salt-api pyOpenSSL
四、配置salt-master配置文件加密
master節點配置文件爲/etc/salt/master,內容以下:
interface: 0.0.0.0 publish_port: 4505 user: root max_open_files: 100000 worker_threads: 5 ret_port: 4506 root_dir: / default_include: master.d/*.conf #設置salt master的配置文件,包含master.d目錄下的文件 pki_dir: /etc/salt/pki/master keep_jobs: 24 timeout: 5 auto_accept: True state_top: top.sls file_roots: base: - /srv/salt log_file: /var/log/salt/master log_level: debug file_recv: True #啓用從客戶端傳送文件到master節點
五、部署配置salt-api認證,添加認證用戶,生成證書等url
#建立一個saltapi用戶,同時爲該用戶添加密碼 useradd -M -s /sbin/nologin saltapiuser echo '123456' | passwd saltapi --stdin #開啓visudo,使該用戶能擁有root權限 usermod -g wheel saltapi #進行自簽名證書配置 cd /etc/pki/tls/certs/ make saltapicert salt-call --local tls.create_self_signed_cert
提示已經存在時,能夠刪除/etc/pki/tls/certs/localhost.crt /etc/pki/tls/certs/localhost.key從新生成
六、添加salt-api配置文件,設置遠程調用端口等內容spa
vim /etc/salt/master.d/api.conf
內容以下:
rest_cherrypy: port: 8010 #設置遠程rest api調用端口 ssl_crt: /etc/pki/tls/certs/localhost.crt #自定義tls證書,使其支持https ssl_key: /etc/pki/tls/certs/localhost.key #自定義key external_auth: #設置認證方式 pam: saltapi: - .* - '@wheel' - '@runner'
若不想使用https調用,則將ssl_cert、ssl_key配置去掉便可。
七、配置完成以後,須要重啓相關服務操作系統
systemctl restart salt-master systemctl restart salt-api systemctl restart salt-minion
八、獲取認證token值
curl -sSk https://18.18.1.6:8010/login -H 'Accept: application/x-yaml' -d username='saltapiuser' -d password='123456' -d eauth='pam'
顯示內容以下:
return:
- eauth: pam
expire: 1535514571.611626
perms:
- .*
- '@wheel'
- '@runner'
start: 1535471371.611626
token: f9546b1a123bd1edcefefbcff37a54ff3358cda3 #此處即爲遠程調用的token值
user: saltapiuser
備註:若是在配置文件中,並未配置ssl_cert、ssl_key配置,請使用http進行調用。同時若重啓salt-api服務,token值會變化。若再次生成,也會發生變化。
九、執行models,使用test.ping查看是否調用成功。
[root@192-168-40-71 ~]# curl -k https://18.18.1.6:8010/ -H "Accept: application/x-yaml" -H "X-Auth-Token: f9546b1a123bd1edcefefbcff37a54ff3358cda3" -d client='local' -d tgt='192.168.40.71' -d fun='test.ping' return: - 192.168.40.71: true
輸出結果如上,便可說明salt-api已經配置完成,同時可以使用rest api進行調用。
十、遠程調用命令解析
-d client='local':使用local進行遠程命令執行 -d tgt='192.168.40.71':指定遠程minion節點地址 -d fun='cmd.run' :調用的模塊名稱 -d arg='ip addr list':調用模塊所須要的參數 備註:若是調用的模塊須要多個參數,須要指定多個-d arg='參數內容'進行使用。請參考模塊使用示例中的add_host添加解析做爲參考。
十一、經常使用模塊使用示例
使用cmd.run模塊,遠程執行命令
curl -k https://18.18.1.6:8010/ -H "Accept: application/x-yaml" -H "X-Auth-Token: f9546b1a123bd1edcefefbcff37a54ff3358cda3" -d client='local' -d tgt='192.168.40.71' -d fun='cmd.run' -d arg='ip addr list'
使用add_host添加hosts解析
curl -k https://18.18.1.6:8010/ -H "Accept: application/x-yaml" -H "X-Auth-Token: f9546b1a123bd1edcefefbcff37a54ff3358cda3" -d client='local' -d tgt='192.168.40.71' -d fun='hosts.add_host' -d arg='2.2.2.2' -d arg='test.lcs'
其中2.2.2.2爲ip地址,test.lcs爲域名。
使用cp.push方法從minion上將文件複製到master節點上
curl -k https://18.18.1.6:8010/ -H "Accept: application/x-yaml" -H "X-Auth-Token: f9546b1a123bd1edcefefbcff37a54ff3358cda3" -d client='local' -d tgt='192.168.40.71' -d fun='cp.push' -d arg='/tmp/1.txt'
複製過來的文件位置爲:/var/cache/salt/master/minions/192.168.40.71/files/tmp,其中192.168.40.71爲minion節點ip地址。
調用cp.get_file方法,將master節點上文件複製到minion節點上。
curl -k https://18.18.1.6:8010/ -H "Accept: application/x-yaml" -H "X-Auth-Token: f9546b1a123bd1edcefefbcff37a54ff3358cda3" -d client='local' -d tgt='192.168.40.71' -d fun='cp.get_file' -d arg='salt://tmp/1.txt' -d arg='/data/1.txt'因爲須要在複製文件的時候,須要傳入多個參數,所以,使用run模塊,將多個參數放在列表中傳入。curl -k https://18.18.1.6:8010/run -H "Accept: application/json" -H "Content-type: application/json" -d '[{"client":"local","tgt":"192.168.40.71","fun":"cp.get_file","arg":["salt://tmp/1.txt","/data/111.txt"],"username":"xxx","password":"xxx","eauth":"pam"}]'