salt-api 配置使用

salt-api 安装 ;配置源 (系统环境示例是centos6)

环境:

系统:
# cat /etc/issue
CentOS release 6.7 (Final)
内核:
# uname -r
2.6.32-573.el6.x86_64
运行账户:
root 
运行环境:
# java -version
java version "1.8.0_92"

yum 源配置

epel 源
rpm -Uvh https://mirrors.tuna.tsinghua.edu.cn/epel/6/i386/epel-release-6-8.noarch.rpm

salt-stack 源
# vi 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

  1、yum 安装 salt 

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

  2、配置证书 自生成证书 证书目录

切换证书目录 生成自签名证书
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

  3、创建 salt-api 账户

# useradd -M -s /sbin/nologin salt-api
# echo "salt-api" | passwd salt-api --stdin

  4、配置 master 配置文件

# cat /etc/salt/master |grep -v ^$ |grep -v ^#

default_include: master.d/*.conf
# 设置开启配置目录
interface: 172.16.5.17
# 设置 master IP 

  5、配置 api 相关配置文件

创建  api 配置文件 api.conf

# cat api.conf 
rest_cherrypy:
  host: 172.16.5.17   # 主机
  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 配置文件目录结构

  7、配置 minion

[root@oracle yum.repos.d]# cat /etc/salt/minion |grep -v ^$ |grep -v ^#
master: 172.16.5.17
id: 172.16.5.18
# 本机ip

  8、启动:

/etc/init.d/salt-master restart
/etc/init.d/salt-api restart
/etc/init.d/salt-minion restart

9、测试 salt-api 获得 token (token值 api服务重启后失效)

# curl -ssk https://172.16.5.17: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://172.16.5.17: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://172.16.5.17: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://172.16.5.17: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

示例:

curl -sk http://172.16.5.17:8888/run \
    -H 'Accept: application/x-yaml' \
    -H 'Content-type: application/json' \
    -d '[{
        "client": "local",
        "tgt": "172.16.5.23",
        "fun": "test.ping",
        "username": "salt-api",
        "password": "salt-api",
        "eauth": "pam"
    }]' 

root@oracle:/etc/salt/master.d# curl -sSk https://172.16.5.17:8888 -H 'Accept: application/x-yaml' -H 'X-Auth-Token: 19d7f22e22b9968b7dd4d293868739d994100be8' -d client=local -d tgt='172.16.5.23' -d fun=cmd.run -d arg=hostname
return:
- 172.16.5.23: web1

root@EM-6CU623W7BA:/etc/salt/master.d# curl -sSk https://172.16.5.17:8888 -H 'Accept: application/x-yaml' -H 'X-Auth-Token: 19d7f22e22b9968b7dd4d293868739d994100be8' -d client=local -d tgt='172.16.5.23' -d fun=cmd.run -d arg=uptime
return:
- 172.16.5.23: ' 21:54:54 up 298 days, 13:27,  1 user,  load average: 0.00, 0.00,
    0.00'

 

 

 

  

 

posted @ 2019-10-16 15:58  01234567  阅读(948)  评论(0编辑  收藏  举报