最近在用 saltstack 获取 token 的时候总是出现 401 认证失败,百度谷歌查了很多资料都没能解决,嗯,这次基本上该出的错都出来了,这次也怪自己没太仔细,加上最近事情较多,看到报错的时候就有些心态爆炸,但是这一步不走通又没法完成后面的内容,放置了一天后,今早上过来又重新看到 saltstack 在 github 上的一篇 ,之后成功获取,看到结果的时候还是有些小激动的,遂赶紧记录下来。
一、环境配置
1、api.conf
[root@V1 salt]# cat /etc/salt/master.d/api.conf rest_cherrypy: port: 8000 disable_ssl: True
2. eauth.conf
[root@V1 salt]# cat /etc/salt/master.d/eauth.conf external_auth: pam: saltapi: - .* - '@wheel' - '@runner'
3、salt-api --versions
[root@V1 salt]# salt-api --versionsSalt Version: Salt: 2018.3.2 Dependency Versions: cffi: 1.11.5 cherrypy: 3.6.0 dateutil: Not Installed docker-py: Not Installed gitdb: Not Installed gitpython: Not Installed ioflo: Not Installed Jinja2: 2.9.6 libgit2: Not Installed libnacl: Not Installed M2Crypto: 0.21.1 Mako: Not Installed msgpack-pure: Not Installed msgpack-python: 0.5.1 mysql-python: Not Installed pycparser: 2.18 pycrypto: 2.6.1 pycryptodome: Not Installed pygit2: Not Installed Python: 2.7.5 (default, Apr 11 2018, 07:36:10) python-gnupg: Not Installed PyYAML: 3.11 PyZMQ: 14.3.1 RAET: Not Installed smmap: Not Installed timelib: Not Installed Tornado: 4.2.1 ZMQ: 3.2.5 System Versions: dist: centos 7.4.1708 Core locale: UTF-8 machine: x86_64 release: 3.10.0-693.21.1.el7.x86_64 system: Linux version: CentOS Linux 7.4.1708 Core
嗯,排错的过程中我把 salt 版本也给升级了一下,不得不说官网的安装升级操作真的非常友好,附上链接如下
a.
Salt Bootstrap 是一个 shell 脚本,可检测目标平台并选择最佳安装方法(取自谷歌翻译 . PS认真脸)
b.
安装最新版本。 即使是新的主要版本,更新也会安装最新版本。
此种方式提供了三种版本的安装,分别为 REDHAT / CENTOS 7 PY2、REDHAT / CENTOS 7 PY3、REDHAT / CENTOS 6 PY2,我两种方式都试了下,真的敲方便。
细节不多说,直接上思路,多亏了那位老哥的思路排除401,干看着知道是认证失败,然后又不知道从哪验证内心还是有些难受的。
[root@salt ~]# cat /etc/salt/master # 查看 master 主配置文件external_auth: pam: salt: - .* - '@wheel' # to allow access to all wheel modules - '@runner' # to allow access to all runner modules - '@jobs' # to allow access to the jobs runner and/or wheel module[root@salt ~]# systemctl start salt-master salt-minion # 重启 master 和 minion[root@salt ~]# useradd -m salt # 添加账户[root@salt ~]# echo testpass | passwd --stdin salt # 给账户添加一个密码Changing password for user salt.passwd: all authentication tokens updated successfully.[root@salt ~]# salt-key -Ay # 更新未接受的 keysThe following keys are going to be accepted:Unaccepted Keys:saltKey for minion salt accepted.[root@salt ~]# sleep 10 # 等待 10 s[root@salt ~]# salt -a pam --username=salt --password=testpass \* test.ping # 尝试使用pam对minion进行验证salt: True
当我把依照上述步骤把验证文件放置到 master 主配置文件之后,重启 master 服务(试错过程好几次master、minion 和 api 都有起不来的情况,安装了一些包(如 PyZMQ 等),更新了一下内容(如 pip install CherryPy==3.6.0 等),后面终于调回了报 401,尴尬 ),再用 postman 调用获取token的接口就成功了。
[root@V1 salt]# curl -k http://127.0.0.1:8000/login -H "Accept: application/json" -d username='saltapi' -d password='saltapi' -d eauth='pam'{"return": [{"perms": [".*", "@wheel", "@runner"], "start": 1530760488.001925, "token": "4235157b6841803df754ec2b554e002c0fcb5592", "expire": 1530803688.001926, "user": "saltapi", "eauth": "pam"}]}
后来寻思,如果只是把配置加进了主配置文件就可以了的话,说明在主配置文件的 default_include 应该是没有生效的,没成功之前的配置是这样的
# Per default, the master will automatically include all config files# from master.d/*.conf (master.d is a directory in the same directory# as the main master config file).default_include : master.d/*.conf
在重试的时候加了当前目录
default_include : ./master.d/*.conf
然后 OK 了。
在成功获取到 token 后,我又把配置文件改成了原来的,重启了各项服务,,,尴尬的是并没能重现问题。。。重启了 minion 都没能刷新 key 。。。
大致就是这样,排错的过程中多找找资料,多尝试,最好看官方的 doc 和 issue ,一定要官方(血泪史)。
拿到 token 的我终于可以进行下一步了。
参考资料
1.