salt-api 安装
配置源 (系统环境s示例是centos6)
epel 源 rpm -Uvh https://mirrors.tuna.tsinghua.edu.cn/epel/6/i386/epel-release-6-8.noarch.rpm salt-stack 源 # cat salt-stack.repo [saltstack-repo] name=SaltStack repo for Red Hat Enterprise Linux $releasever baseurl=http://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest # baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest enabled=1 gpgcheck=1 # 或者 设置 gpgcheck=0 # gpgkey=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub gpgkey=http://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub
yum 安装
salt-master: yum install salt-master salt-minion salt-ssh salt-syndic salt-cloud -y salt-api: yum install salt-api -y salt-minion: yum install salt-minion -y
配置证书 自生成证书 证书目录
切换目录 生成自签名证书 cd /etc/pki/tls/certs make testcert # 需要输入 key 和 EDNs 2048 2048 2048 # 剩余的可以enter直接默认回车。 切换私钥目录: cd /etc/pki/tls/private # 解密key文件,生成无密码的key文件, 过程中需要输入key密码,该密码为之前生成证书时设置的密码 openssl rsa -in localhost.key -out localhost_nopass.key
创建 salt-api 账户
# useradd -M -s /sbin/nologin salt-api # echo "salt-api" | passwd salt-api --stdin
配置 master 配置文件
# cat /etc/salt/master |grep -v ^$ |grep -v ^# default_include: master.d/*.conf # 设置开启配置目录 interface: 10.10.83.77 # 设置 master IP
配置 api 相关配置文件
创建 api 配置文件 api.conf
# cat api.conf rest_cherrypy: host: 10.10.83.77 # 主机 port: 8888 # 端口 ssl_crt: /etc/pki/tls/certs/localhost.crt ssl_key: /etc/pki/tls/private/localhost_nopass.key
创建 eauth 认证文件: eauth.conf
# cat eauth.conf external_auth: pam: # 认证模式,pam 是linux用户默认认证模式 salt-api: # salt-api 认证用户 (前面设置的) - .* # 设置用户权限 *全部 - '@wheel' # 模块 - '@runner' # 模块
salt-api 配置文件目录结构
配置 minion
[root@oracle yum.repos.d]# cat /etc/salt/minion |grep -v ^$ |grep -v ^# master: 10.10.83.77 id: 10.10.84.201
启动:
/etc/init.d/salt-master restart /etc/init.d/salt-api restart /etc/init.d/salt-minion restart
测试 salt-api 获得 token (token值服务重启后失效)
# curl -ssk https://10.10.83.77:8888/login -H 'Accept: application/x-yaml' -d username='salt-api' -d password='salt-api' -d eauth='pam' return: - eauth: pam expire: 1571255434.530587 perms: - .* - '@wheel' - '@runner' start: 1571212234.530586 token: 7d43359bdc35297482926be2fcf378d136b29f5a user: salt-api curl 参数: -k 忽略证书获取https内容 -s 指定使用静默(silent)方式 -i 指定SaltAPI收到服务器返回的结果同时显示HTTP Header。 -H 指定一个特定的Header给远端服务器,当SaltAPI 需要发送appliton-tion/json Header时。会以我们希望的JSON格式返回结果 -d 想远端服务器发送POST请求,以key=value的格式发送 ,注意key=v时,必须紧挨=号两边
测试功能模块
# 获得token curl -k https://10.10.83.77:8888/login -H 'Accept: application/x-yaml' -d username='saltapi' -d password='saltapi' -d eauth='pam' # 测试test.ping ; salt 'ip' test.ping (local) curl -k https://10.10.83.77:8888 -H "Accept: application/x-yaml" -H "X-Auth-Token: 6d133baa48ad607233cb80599c35c10d49d5f26a" -d client='local' -d tgt='*' -d fun='test.ping' 测试 salt -l 'ip' cun.run 'df -h' curl -k https://10.10.83.77:8888 -H "Accept: application/x-yaml" -H "X-Auth-Token: 6d133baa48ad607233cb80599c35c10d49d5f26a" -d client='local' -d tgt='*' -d fun='cmd.run' -d arg='df -h' 执行参数: client : 模块,python处理salt-api的主要模块,‘client interfaces <netapi-clients>’ local : 使用‘LocalClient <salt.client.LocalClient>’ 发送命令给受控主机,等价于saltstack命令行中的'salt'命令 local_async : 和local不同之处在于,这个模块是用于异步操作的,即在master端执行命令后返回的是一个jobid,任务放在后台运行,通过产看jobid的结果来获取命令的执行结果。 runner : 使用'RunnerClient<salt.runner.RunnerClient>' 调用salt-master上的runner模块,等价于saltstack命令行中的'salt-run'命令 runner_async : 异步执行runner模块 wheel : 使用'WheelClient<salt.wheel.WheelClient>', 调用salt-master上的wheel模块,wheel模块没有在命令行端等价的模块,但它通常管理主机资源,比如文件状态,pillar文件,salt配置文件,以及关键模块<salt.wheel.key>功能类似于命令行中的salt-key。 wheel_async : 异步执行wheel模块 备注:一般情况下local模块,需要tgt和arg(数组),kwarg(字典),因为这些值将被发送到minions并用于执行所请求的函数。而runner和wheel都是直接应用于master,不需要这些参数。 tgt : minions fun : 函数 arg : 参数 expr_form : tgt的匹配规则 'glob' - Bash glob completion - Default 'pcre' - Perl style regular expression 'list' - Python list of hosts 'grain' - Match based on a grain comparison 'grain_pcre' - Grain comparison with a regex 'pillar' - Pillar data comparison 'nodegroup' - Match on nodegroup 'range' - Use a Range server for matching 'compound' - Pass a compound match string