我的设置如下:
A
是我开始的地方B
是网关机器C
是目的地。从A
到B
我已经设置了 SSH 公钥认证,但是从B
到C
我不允许。
所以从节点A
我使用以下咒语,它实际上在不同的机器(Ubuntu 14.04)上工作:
sshpass -p secretpass ssh -oProxyCommand="ssh -W %h:%p username@B" username@C
Run Code Online (Sandbox Code Playgroud)
……但是,当我从另一台机器(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)
Run Code Online (Sandbox Code Playgroud)
好的,所以我想出了是怎么回事。因为我是第一次在这台机器上使用这个脚本,所以我必须首先执行以下操作(没有sshpass
):
ssh -oProxyCommand="ssh -W %h:%p username@B" username@C
Run Code Online (Sandbox Code Playgroud)
然后我被提示:
主机'C <no hostip for proxy command>)' 的真实性无法建立。
RSA 密钥指纹是 SHA256:... 。
您确定要继续连接吗(是/否)?是的
警告:将“C”(RSA)永久添加到已知主机列表中
...一旦我接受了上述内容,我就可以使用我在问题中询问的咒语而不会出现其他问题。
所以这次失败是因为咒语无法回答只出现一次的真实性提示。