我必须执行一系列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。所以我认为最后一跳失败了,也就是ProxyCommand
到T
。
正如您在配置中看到的ssh.exe
,我是在 Windows 主机上执行此操作,但它仍然是 OpenSSH,因此不会有太大区别。