前言

salt-api在使用时,有些坑欲哭无泪,一路趟雷过后,总结了一趟salt-pai使用填坑指南,保君一路畅通。

salt-api 安装

#本文的安装版本 2018.3.2-1.el6
yum install salt-api.noarch 

centos 6

checkconfig salt-api on
service salt-api start

centos 7

systemctl enable salt-api.service
systemctl start salt-api

salt-api 配置

cd /etc/salt/master.d/
vi api.conf

内网不安全,需要使用秘钥加密,请问度娘

rest_tornado:
    port: 8888
    #ssl_crt: /etc/pki/tls/certs/localhost.crt
    #ssl_key: /etc/pki/tls/private/localhost_nopass.key
    debug: True
    disable_ssl: True

rest_cherrypy:
    port: 8889
    #ssl_crt: /etc/pki/tls/certs/localhost.crt
    #ssl_key: /etc/pki/tls/private/localhost_nopass.key
    debug: True
    disable_ssl: True
vi eauth.conf
external_auth:
  pam:
    saltapi:
      - .*
      - '@runner'  
      - '@wheel'

pam 表示salt-api的验证采用Linux系统自带的pam验证,就是基于Linux用户的验证方式

saltapi 这个是Linux用户,所以salt-api就可以基于Linux用户密码进行验证

useradd  saltapi
passwd saltapi

注意暂时不要设置saltapi用户为nologin,不然你会后悔的
saltapi用户密码用 saltapipw 指代

service salt-api restart

验证salt-api是否可用

curl -si http://salt-api-ip:8888/login \
        -H "Accept: application/json" \
        -d username='saltapi' \
        -d password='saltapipw' \
        -d eauth='pam'

返回 json 包含 tonken 则正常

填坑记录

请求几次salt-api就会返回401?

首先su验证下用户输入密码是否正确

#su - saltapi
Account locked due to 66 failed logins

# less /var/log/secure
python2.7: pam_tally2(login:auth): user saltapi (7006) tally 62, deny 5

发现用户竟然被锁

#查看用户登录状态
#pam_tally2 --user=saltapi
Login           Failures Latest failure     From
saltapi            66    09/30/18 11:02:01  pts/1

重置账户登录失败计数

#pam_tally2 --user=saltapi --reset
#pam_tally2 --user=saltapi 
Login           Failures Latest failure     From
saltapi             0 

重新请求salt-api正常,但是几次后还是被锁

临时解决方法,取消pam_tally2验证

vi /etc/pam.d/system-auth
#注释
auth        required      pam_tally2.so   onerr=fail deny=5 unlock_time=1800

salt-api的验证用户设置nologin,如何验证密码?

#可以在root用户下执行
salt -T -a pam 'minion_id' test.ping
#注意,如果验证通过,就会生成~/salt_token 文件,里面记录验证用户的tonken,如果过期或者重新验证,需要删除这个文件