使用 ssh -t 可以通过跳转主机进行连接,但 ssh -W 不起作用

使用 ssh -t 可以通过跳转主机进行连接,但 ssh -W 不起作用

我正在尝试通过我无法控制的方式LocalClient连接我的计算机。我可以完全控制和(管理员权限)RemoteHostJumpHostclientRemoteHost

我可以通过 ssh 完美连接RemoteHost到:LocalClient

ssh -tX relayUserName@JumpHost remoteUser@RemoteHostIP

我的 ~/.ssh/config 文件的配置为:

Host RemoteHost
    ProxyCommand ssh -W %h:%p JumpHost

现在,如果我尝试通过隧道RemoteHost,我会收到以下错误:

channel 0: open failed: administratively prohibited: open failed
stdio forwarding failed

使用ssh -v,我可以获得更多信息

Authenticated to <JumpHost> ([JumpHostIP]:22).
debug1: channel_connect_stdio_fwd RemoteHostIP:22
debug1: channel 0: new [stdio-forward]
debug1: getpeername failed: Bad file descriptor
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: pledge: network
channel 0: open failed: administratively prohibited: open failed
stdio forwarding failed
ssh_exchange_identification: Connection closed by remote host

基于这个答案sshd_config,我检查了in /etc/ssh/onRemoteHost和(手动)set的值

AllowTcpForwarding yes

问题仍然存在,我不知道还能尝试什么。

细节:

  • 操作系统:RemoteHostLocalClient:Kubuntu 18.04 LTS
  • ssh 版本(通过 ssh -v 到达):RemoteHostLocalClientOpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
  • ssh 版本:(JumpHost通过 ssh -v debug1 到达):
debug1: Local version string SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5* compat 0x0c000000

附带说明一下,我需要通过隧道访问RemoteHost运行的 Jupyter Lab 实例,--no-browser --port=8889并将其转发到我LocalClient的端口 8888,以便通过浏览器远程访问我的实验localhost:8888

答案1

ProxyCommand ssh -W %h:%p JumpHost在 ssh stdio 和 %h:%p 之间的 JumpHost 上建立转发(对于您的情况是 RemoteHost)。

这意味着AllowTcpForwarding yes配置必须设置为跳转主机sshd_config.不是 RemoteHost,因为只有 JumpHost 正在执行从 stdio 到 RemoteHost 的转发。

如果您无法更改 JumpHost 上的 sshd_config,则应该可以在您的~/.ssh/config

Host RemoteHost
    ProxyCommand ssh JumpHost netcat %h %p

这将执行与 ssh -W 相同的操作,但使用基本命令,因此即使使用 AllowTcpFowarding no,JumpHost 上的 ssh 服务器也不会拒绝它。

它使用 JumpHost 上的 netcat 程序将 ProxyCommand 的 ssh stdio 重定向到另一台主机,如下所示:

interactive ssh <= stdio => ProxyCommand's ssh <= network => JumpHost's sshd <= stdio => netcat <= network => RemoteHost

ssh连接图

也可以看看:https://www.cyberciti.biz/faq/linux-unix-ssh-proxycommand-passing-through-one-host-gateway-server/

相关内容