salt-api安装以及简单实使用
1、安装说明
操作系统版本:CentOS Linux release 7.5.1804 (Core)
saltstack版本:2018.3.2
已经关闭selinux、firewalld服务。
2、配置yum源
编辑/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
3、安装salt-master、salt-minion、salt-api
yum install salt-master salt-minion salt-api pyOpenSSL
4、配置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节点
5、部署配置salt-api认证,添加认证用户,生成证书等
#创建一个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重新生成
6、添加salt-api配置文件,设置远程调用端口等内容
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配置去掉即可。
7、配置完成之后,需要重启相关服务
systemctl restart salt-master systemctl restart salt-api systemctl restart salt-minion
8、获取认证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值会变化。若再次生成,也会发生变化。
9、执行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进行调用。
10、远程调用命令解析
-d client='local':使用local进行远程命令执行 -d tgt='192.168.40.71':指定远程minion节点地址 -d fun='cmd.run' :调用的模块名称 -d arg='ip addr list':调用模块所需要的参数 备注:如果调用的模块需要多个参数,需要指定多个-d arg='参数内容'进行使用。请参考模块使用示例中的add_host添加解析作为参考。
11、常用模块使用示例
使用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"}]'