sshpass 失败,退出代码 6

sshpass 失败,退出代码 6

我的设置如下:

  • 节点A是我开始的地方
  • 节点B是网关机器
  • 节点C是目的地。

AB我已经设置了 SSH 公钥身份验证,但从BC我不被允许这样做。

因此,从节点A我使用以下咒语,它实际上可以在不同的计算机(Ubuntu 14.04)上运行:

sshpass -p secretpass ssh -oProxyCommand="ssh -W %h:%p username@B" username@C

…然而,当我尝试从另一个位置使用另一台机器(Ubuntu 16.04 - 尽管我怀疑这是否相关)时,调用sshpass立即返回,没有任何类型的输出和退出代码(通过 获得echo $?)为 6。

更令人费解的是,如果我单独执行这些步骤,它们就会成功:

A: $ ssh username@B   (directly access B without being prompted for password)
B: $ ssh username@C   (prompted for password, provided 'secretpass')
C: $                  (reached my destination)

答案1

好的,所以我知道出了什么问题了。由于我是第一次在这台机器上使用此脚本,因此我必须首先执行以下操作(不带sshpass):

ssh -oProxyCommand="ssh -W %h:%p username@B" username@C

然后我被提示:

无法确定主机“C <没有用于代理命令的主机IP>)”的真实性。

RSA 密钥指纹是 SHA256:...。

您确定要继续连接吗(是/否)?是的

警告:已将“C”(RSA) 永久添加到已知主机列表中

……一旦我接受了上述内容,我就能够使用我在问题中询问的咒语,而不会出现进一步的问题。

所以这次失败是因为咒文无法回答只出现一次的真伪提示。

sshpass从(返回值部分)的手册页:

与任何其他程序一样,sshpass 在成功时返回 0。如果失败,则使用以下返回代码:
[...]
6 主机公钥未知。 sshpass 退出而不确认新密钥。

答案2

如果您需要在第一次不接受指纹的情况下使其工作,您可以使用:

ssh ... -o "StrictHostKeyChecking=no"

相关内容