Python 通过paramiko的curl失败,401手动运行成功

Python 通过paramiko的curl失败,401手动运行成功,python,authentication,paramiko,Python,Authentication,Paramiko,我正在使用大量只能从jumphost访问的linux设备。每个设备都有一个RESTful端点,其中包含一些数据,我需要对这些数据执行一些逻辑。由于jumphost管理的限制,执行这些调用的唯一方法是使用paramiko并运行curl,然后捕获stdout和stderr 我最近发现一些设备返回401未经授权的状态码。这些调用都是以相同的顺序同步进行的,它们通过一批设备(即,第一次成功、第二次失败、第三次至第六次成功、第七次和第八次失败等)进行传递。我还对其中一个失败的设备手动运行了paramiko

我正在使用大量只能从jumphost访问的linux设备。每个设备都有一个RESTful端点,其中包含一些数据,我需要对这些数据执行一些逻辑。由于jumphost管理的限制,执行这些调用的唯一方法是使用paramiko并运行curl,然后捕获stdout和stderr

我最近发现一些设备返回401未经授权的状态码。这些调用都是以相同的顺序同步进行的,它们通过一批设备(即,第一次成功、第二次失败、第三次至第六次成功、第七次和第八次失败等)进行传递。我还对其中一个失败的设备手动运行了paramiko,但在手动运行时仍然失败。神秘之处在于,如果我登录到jumphost并直接在控制台中执行curl,它将返回200状态

与Paramiko一起运行:

>>> import paramiko
>>> import re
>>>
>>> client = paramiko.SSHClient()
>>> client.connect('192.168.1.10', username='jumpuser', password='jumppa$$')
>>> _, stdout, stderr = client.exec_command('curl -v -X POST --user "us3rn4me:p4$$w0rd" https://host/api/endpoint')
>>>
>>> print("\nOut Message: {}\nStatus Code: {}".format(stdout, re.findall(HTTP.*(\d\d\d), stderr)[-1]))  ​

Out Message: no valid authentication method found
Status Code: 401
CLI运行:

[jumpuser@192.168.1.10~]$ curl -X POST --user "us3rn4me:p4$$w0rd" https://host/api/endpoint
{
    "search_id": "12839123004810F52359SF"
}

我对paramiko如何工作以及端点如何/是否可以看到起始点知之甚少,但我唯一能想到的是,这些特定设备上有某种东西阻止了呼叫。不知道从哪里开始寻找。以前有人经历过类似的事情吗?

我认为这与您的shell和密码有关。通常情况下,我会使用单引号,以避免shell替换$$。特别是在Bash中,$$是Bash进程本身的PID。因此,在python中,尝试执行exec_命令(“curl…”user:pa$$'url”)@Hitobat我也测试过。它偶尔工作,每次在完全相同的设备上出现故障,这一事实似乎表明这些特定设备是如何看到流量的,这让我感到困惑。@Hitobat我是potate,这正是问题所在。谢谢