前言

最近在看《python3 自动化软件发布系统》这本书,书中自动化部署是基于saltstack实现的,为了实现整个系统低耦合分开部署,就必须要借助saltstack 的REST api了。

我先说一下我这边的情况,我拿到token是没报401错误的,我看网上的很多人token都拿不到,多半是对salt REST api部署工具链不熟,没有在eauth.conf授权调用用户,当然也有其它情况,如果你连拿token都报401,那下面的文章不用看了,本文不适合你。

下面贴一下我的报错截图

访问saltstack REST api报401 Unauthorized错误,折腾了一个通宵竟是因为...</a />

针对这个错误我试过无数次重启salt-master,salt-api服务,重启虚拟机,甚至连重启宿主机电脑都没有什么用,我看网上有人说eauth.conf这个文件的格式不正确都会导致401未授权错误,

于是我调整了这个conf文件中每一行距离开头的空格数,从两个调到了四个,又从四个调成了两个,就这样反复了无数遍都没什么卵用,就在我快要放弃的时候,瞎看了一会官方文档,突然发现了我的问题,小小改动了一个地方,没有报401错了,这时抬头一看天已经快亮了。

下面是我改动之后没有报错的截图:

访问saltstack REST api报401 Unauthorized错误,折腾了一个通宵竟是因为...

解决

下面的内容是付费内容,请用支付宝小小破费之后查看哦。

[$]

其实是我疏忽大意了,拿token时用的url是https://10.211.55.14:8899/login,完整的命令如下:

curl -sSk https://127.0.0.1:8899/login -H 'Accept: application/x-yaml' -d username='salt-api-client' -d password=xxxxxxxx -d eauth=pam

而通过拿到的token去调cmd.run模块时的命令前面部分和上面命令的前面部分一样,于是疏忽大意的我就直接复制粘贴了上面部分的命令的前半部分再加上剩下的就形成了下面的错误命令:

curl -sSk https://127.0.0.1:8899/login -H "Accept: application/x-yaml" -H "X-Auth-Token: 9850af0abxxxxxxxb6d8bfeff51f9axxxxxxx8e" -d client='local' -d tgt='127.0.0.1' -d fun='cmd.run' -d arg='ip a'

上面命令错误的地方就在这次请求的url不应该再带`/login`这个路径了,去掉这个`/login`再去请求就不会报错了。

[/$]

写在最后

如果你看完收费内容后,发现和你的情况不同,解决不了你的401未授权错误,请微信加我好友Baksmali,我退你一半钱,那一半算是我码字的辛苦费啦😘。