![通过中间机器使用隧道创建到 VNC 服务器的 ssh 配置](https://linux22.com/image/224359/%E9%80%9A%E8%BF%87%E4%B8%AD%E9%97%B4%E6%9C%BA%E5%99%A8%E4%BD%BF%E7%94%A8%E9%9A%A7%E9%81%93%E5%88%9B%E5%BB%BA%E5%88%B0%20VNC%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%20ssh%20%E9%85%8D%E7%BD%AE.png)
我最近发现了 ssh 配置文件,可以在其中设置常用的 ssh 连接。但是,我在转换一个将我的计算机连接到隐藏在中间服务器后面的服务器上运行的 VNCServer 的命令时遇到了麻烦。基本上改变这个命令(有效):
ssh -t -L port1:localhost:port2 [email protected] ssh -L port2:localhost:port3 [email protected]
在vncviewer localhost:0
单独的窗口中,进入 ssh 配置文件。我设法创建一个连接到机器的配置而不抛出任何Failed to set up port
消息,但是当我在单独的终端窗口中运行时
vncviewer localhost:0
我收到一个错误。如果 ~/.ssh/config 以这种方式设置(我自己的尝试):
Host machine1
HostName machine1.com
User user1
LocalForward port1 localhost:port2
RequestTTY force
Host machine2
HostName machine2.com
User user2
LocalForward port2 localhost:port3
ProxyJump machine1
并通过运行运行ssh machine2
,然后vncviewer localhost:0
在新的终端窗口中错误是"Failed to connect to localhost:0": unable to connect to socket: Connection refused (111).
在我将其设置为提及的情况下这里:
Host machine2
HostName machine2.com
User user2
LocalForward port1 user1@machine1:port2
LocalForward port2 user2@machine2:port3
RequestTTY force
我收到一条错误消息:The connection was dropped by the server before the session could be established.
在这两种情况下,我都在终端窗口中连接到 machine2 并且可以浏览内容。但我也想连接到 vncserver。
你能解释一下我在这里做错了什么吗?在创建任何其他 ssh 配置时,我正在查阅这些来源: https://linuxize.com/post/using-the-ssh-config-file/---初学者指南
https://man7.org/linux/man-pages/man1/ssh.1.html--- 查看使用的每个 -t -LI 的定义
https://phoenixnap.com/kb/ssh-config--- 将 -t -L 转换为 ssh 配置命令
https://www.ssh.com/academy/ssh/tunneling-example---解释我是否需要本地转发或远程转发
答案1
第一个配置看起来不错。至于第二种配置LocalForward
需要一个hostname
并且您已提供,user@address
请参阅[1]。
使用您的第一个配置(我在下面编辑了您的第一个配置)并运行
ssh -v -J machine1 machine2 -NL <p1>:localhost:<p2> # -v print ssh debugging messages
# <p1> : port on your computer
# <p2> : vnc port on machine2
编辑ssh配置:
Host machine1
HostName machine1.com
User user1
#Port 22
Host machine2
HostName machine2.com
User user2
ProxyJump machine1
#Port 22
#LocalForward <p1> localhost:<p2>
# <p1> port on your computer
# <p2> port on machine2
[0] ssh with -v
flag 可以让您了解您的连接出了什么问题。
[1]https://linux.die.net/man/5/ssh_config
[2] 有关代理跳转的更多信息https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts#Jump_Hosts_--_Passing_Through_a_Gateway_or_Two
[3] 有关代理跳转的更多信息https://www.infoworld.com/article/3619278/proxyjump-is-safer-than-ssh-agent-forwarding.go