背靠背使用 SSH ProxyJump 和 SSH 代理转发

背靠背使用 SSH ProxyJump 和 SSH 代理转发

我必须执行一系列ProxyJump操作才能到达特定目标系统T。最后一跳根本T不支持 TCP 转发,导致ProxyJump失败ProxyCommand,所以这不是一个选择。

Me --> Bastion A --> Bastion B --> T

我正在寻找一个 SSH 配置,它允许我ssh T在我的计算机上执行并连接到T。如上所述,Bastion B不允许代理转发。

我已经做了一些尝试来自动RemoteCommand执行ssh -A T,并且添加了-tt强制 SSH 将连接的 STDIN/STDOUT 附加B<->T到原始Me <-> Bastion B连接的选项,但这实际上禁用了很多终端功能(即制表符补全等),因为它RemoteCommand是一个非交互式 shell。

有没有办法使用我自己的 SSH 配置文件来“宏化”此行为? 由于 Bastion B 有时也是目标,我无法简单地使用 .bashrc 或其他东西进行自动连接,每次连接时都会伪转发我。

一种可能的解决方案(我在输入时就想到了这一点)是MY_NEXT_HOP=T通过 SSH 推送环境变量,并在 中对其进行评估.bashrc,如果已设置,则触发ssh -A T。这样,它会在交互式 shell 中启动,并且我不会丢失 shell 功能。然而,我是否错过了更好的解决方案?

编辑:为了消除一些困惑,请参阅下面我的 SSH 配置文件和我的连接尝试的输出:

# .ssh/config
Host BastionA
    User myUserA
    HostName BastionA.domain.com
    IdentityFile "ssh.key"

Host BastionB
    User myUserB
    HostName BastionB.domain.com
    ProxyCommand ssh.exe -W %h:%p BastionA
    IdentityFile "ssh.key"
    ForwardAgent yes   # if this is necessary

Host T
    User myUserB
    HostName T.domain.com
    ProxyCommand ssh.exe -W %h:%p BastionB
    IdentityFile "ssh.key"

这是我尝试连接时得到的结果ssh T

warning: agent returned different signature type ssh-rsa (expected rsa-sha2-512)
Authorized uses only. All activity may be monitored and reported.
# Bastion A reached successfully
warning: agent returned different signature type ssh-rsa (expected rsa-sha2-512)
# Bastion B reached successfully
channel 0: open failed: administratively prohibited: open failed
stdio forwarding failed
ssh_exchange_identification: Connection closed by remote host

与此同时,执行ssh BastionB操作完全正常,我得到了我的 shell。所以我认为最后一跳失败了,也就是ProxyCommandT

正如您在配置中看到的ssh.exe,我是在 Windows 主机上执行此操作,但它仍然是 OpenSSH,因此不会有太大区别。

相关内容