![无法使用 SSH 隧道连接到 VNC 服务器](https://linux22.com/image/135029/%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%20SSH%20%E9%9A%A7%E9%81%93%E8%BF%9E%E6%8E%A5%E5%88%B0%20VNC%20%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我有一个在 Ubuntu 18.04 上运行 xtightvnc 的 Linux 服务器。使用我的笔记本电脑,我可以在 Windows 上使用 PuTTY 建立 SSH 隧道连接,并通过 localhost:5901 建立与 vnc 的连接。这工作没有问题。在同一台笔记本电脑上,如果我启动到 Debian 9 并尝试使用以下命令复制连接:
ssh -L 5901:127.0.0.1:5901 -N -f -l username server_ip_address
我收到一个错误:
bind: Cannot assign requested address
使用详细选项运行相同的命令:
ssh - v -L 5901:127.0.0.1:5901 -N -f -l username server_ip_address
给出以下输出(我已缩短输出):
debug1: Local connections to LOCALHOST:5901 forwarded to remote
address 127.0.0.1:5901
debug1: Local forwarding listening on 127.0.0.1 port 5901.
bind: Address already in use
debug1: Local forwarding listening on ::1 port 5901.
bind: Cannot assign requested address
channel_setup_fwd_listener_tcpip: cannot listen to port: 5901
Could not request local forwarding.
debug1: Requesting [email protected]
debug1: forking to background
debug1: Entering interactive session.
debug1: pledge: network
我不确定这意味着什么,但听起来好像我之前在 Windows 下打开的连接仍然处于活动状态?
我还尝试使用 PuTTY 在 Debian 上建立隧道,并使用与 Windows 下相同的设置。看来我可以使用相同的设置进行连接,并且可以连接到 vnc,尽管这在之前不起作用。 (也许在连接关闭后我不知道某种冷却设置仍然保持连接打开/分配地址?)
编辑:如果地址尚未重置,这是我在 Linux 上使用 PuTTY 收到的错误:
这里的主要问题可能是当我关闭 PuTTY 时,连接仍然处于活动状态(我刚刚测试了这一点,因为我仍然能够使用 localhost:5901 连接到 vnc)。我使用 退出 PuTTY 会话exit
。
的输出netstat -tulpn
也可能相关:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
PID/Program name
tcp 0 0 127.0.0.1:6342 0.0.0.0:* LIS
TEN
21618/megasync
tcp 0 0 127.0.0.1:5901 0.0.0.0:*
LISTEN
21527/Xtightvnc
tcp 0 0 0.0.0.0:6001 0.0.0.0:*
LISTEN
21527/Xtightvnc
tcp 0 0 127.0.0.53:53 0.0.0.0:*
LISTEN
796/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:*
LISTEN
874/sshd
tcp6 0 0 :::22 :::*
LISTEN
874/sshd
udp 33024 0 127.0.0.53:53 0.0.0.0:*
796/systemd-resolve
更新:
看起来一切都正常,但在我关闭与 PuTTY 的连接后,需要一段时间才能从 Windows 或 Linux 的其他实例建立另一个连接。如果有人知道如何加快这一进程,我将非常感激能听到解决方案。
更新2:
在linux下,我似乎可以有效地终止ssh隧道,例如通过使用pkill ssh(终止所有当前的ssh连接)。因此,PuTTY 似乎倾向于在注销时无法正确关闭到服务器的隧道。
答案1
看起来您有一些进程已经在侦听 5901。您可以使用另一个端口:
ssh -L 15901:127.0.0.1:5901 login@host
该命令将转发您的当地的端口 15901 至偏僻的端口 5901。因此您需要使用 VNC 客户端连接到 127.0.0.1:15901。