单步 ssh 端口转发不起作用,但只有在远程跳转服务器和远程本地主机上单独执行 ssh 端口转发时才起作用?

单步 ssh 端口转发不起作用,但只有在远程跳转服务器和远程本地主机上单独执行 ssh 端口转发时才起作用?

考虑此场景中的三台机器:

  1. Machine_A:我本地的 MacBook
  2. Machine_B:某些服务器我可以直接从机器 A 进行 ssh,无需 VPN。(远程跳转服务器)
  3. Machine_C:受防火墙保护的计算机只能由/通过 Machine_B 访问。 (远程受保护的本地主机)

最终,我想在Machine_C上启动VNCserver并在Machine_A上查看它。

我想出了如何通过运行以下示例在 Machine_C 上运行 VNCserver:vncserver :4。截至目前,vncviewer 工作得很好,但我必须这样做启用端口转发以便 vncviewer 成功工作的两步过程:

  1. 在我的 Machine_A 终端上,我运行:ssh -L 5904:localhost:5904 myusername@Machine_B
  2. 从第 1 步开始,我现在已通过 ssh 进入 Machine_B。现在,在 Machine_B 中我运行:ssh-L 5904:localhost:5904 Machine_C

localhost:4一旦这两个步骤正常工作,我的 vncviewer 就可以正常运行,通过输入vncviewer来显示 Machine_C 的 vncsession 。

但是,我必须遵循两个步骤。我记得下面显示的 ONE 命令流程

ssh -L 5904:Machine_C:5904 myusername@Machine_B

应该完成这项工作,但对我不起作用并向我显示这个调试后的响应:

debug1: Connection to port 5904 forwarding to Machine_C port 5904 requested.
debug2: fd 12 setting TCP_NODELAY
debug1: channel 3: new [direct-tcpip]
channel 3: open failed: connect failed: Connection refused
debug2: channel 3: zombie
debug2: channel 3: garbage collecting
debug1: channel 3: free: direct-tcpip: listening port 5904 for Machine_C port 5904, connect from ::1 port 61702 to ::1 port 5904, nchannels 4

以供参考:

我在 Machine_B 和 Machine_C 上的 ~/.ssh/config 文件:

Host *
     ForwardAgent yes
     ForwardX11 yes
     ForwardX11Trusted yes
     RhostsAuthentication yes
     RhostsRSAAuthentication yes
     RSAAuthentication yes
     TISAuthentication no
     PasswordAuthentication yes
     FallBackToRsh yes
     UseRsh no
     BatchMode no
     StrictHostKeyChecking no
     IdentityFile ~/.ssh/identity
     Port 22
     EscapeChar ~

我在 Machine_B 和 Machine_C 上的 ~/.vnc/xstartup 文件设置:

#!/bin/sh


# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc


[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
/usr/bin/gnome-session --session=2d-gnome &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm &
#startx &i
x-window-manager &

有什么帮助可以解决为什么我的一步端口转发ssh -L 5904:Machine_C:5904 myusername@Machine_B不起作用吗?我的东西是不是漏掉了.ssh/config

答案1

-J使用 ssh >= 7.3 (仅在 Machine_A 上需要),这两个步骤可以使用/选项在幕后完成ProxyJump,简化您必须做的事情(实际上提高了这个特定示例的安全性):

ssh -L 5904:localhost:5904 -J myusername@Machine_B myusername@Machine_C

这样,除了简单之外,VNC 访问也不会像您所做的那样在 Machine_B 上进行,因此 Machine_B 的其他用户无法使用您的 VNC。

为了解释,这将是执行相同操作的传统(安全)方式:

ssh -L 2222:Machine_C:22 myusername@Machine_B

在仍在 Machine_A 上的另一个终端上:

ssh -L 5904:localhost:5904 myusername@localhost:2222

请注意,Machine_B 上没有可用的隧道入口点。ProxyJump( -J) 在底层的作用大致相同,只是它在两个 ssh 进程之间使用管道而不是端口 2222。

现在根本无法通过 ssh 连接到 Machine_C,这很可能看起来是 VNC 访问/设置问题,而不是 ssh 问题。您确定 VNC 不限于 localhost 吗?要么通过配置,要么通过本地防火墙?

相关内容