使用密钥的 ssh 内联代理跳转不起作用

使用密钥的 ssh 内联代理跳转不起作用

我需要通过代理跳转建立与远程服务器的连接。我尝试使用 -J 标志来执行此操作。我理解语法如下:

ssh -J A B

但我需要对两个连接都使用密钥文件。因此我尝试了以下方法:

ssh -J -i /path/proxy.pem user@proxy_host -i /path/target.pem user@target_host

显然它不起作用,我得到了

option requires an argument -- i
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
           [-F configfile] [-I pkcs11] [-i identity_file]
           [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]
           [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
           [user@]hostname [command]
ssh_exchange_identification: Connection closed by remote host

在这种情况下,无需编辑 ssh 设置,正确的内联语法是什么?在这种情况下,密钥存储在哪个服务器上没有区别。

答案1

我理解语法如下:

ssh -J A B

是的,但这不是全部。-J不是一个独立的标志——它不会像您尝试做的那样,简单地让您在同一个命令行中指定两组独立的连接选项。

相反,该-J标志采用中间宿主的名称作为参数所以就像-i <keyfile>永远一起走一样,-J <proxy>也必须一直在一起。

即使你使用这个选项,整体的“ssh”语法也不会改变——仍然没有分组哪些选项属于主机 A,哪些属于主机 B。如果你有两个这样的“-i”选项,SSH 只会尝试两个都建立两个连接时,请分别按下 键。

不过,后一部分应该不是问题,因为每个服务器只会表明它不接受密钥,而 SSH 会尝试另一个。因此,下面的操作应该有效:

ssh -J user@proxy_host -i /path/proxy.pem -i /path/target.pem user@target_host
    └────────────────┘ └────────────────┘ └─────────────────┘

但是如果其中一个主机不喜欢尝试多个密钥,则需要将 -J 转换为长格式的 ProxyCommand:

ssh -o ProxyCommand="ssh -i /path/proxy.pem -W %h:%p user@proxy_host" -i /path/target.pem user@target_host

相关内容