如何通过 ssh 连接到我无法直接访问的服务器?

如何通过 ssh 连接到我无法直接访问的服务器?

语境

我正在运行 Ubuntu Desktop 作为我的主机,我将其称为 D。我想通过 ssh 连接到服务器 S,但防火墙阻止了我。

我可以通过一条非常繁琐的路径访问服务器 S,其中涉及 Windows 虚拟机和油灰。这让使用该服务器变得非常烦人:完全不同的环境,复制/粘贴不起作用,我无法在连接到桌面时正确使用桌面(虚拟机损坏了 Alt-Tab)等

我已经验证我可以从服务器 S ssh 到我的台式机 D(与我的需要相反)。

我是否可以以某种方式从服务器启动“端口转发”或类似功能,以便我可以从我的桌面通过 ssh 连接到服务器?

答案1

您可以使用以下命令从远程服务器到本地计算机建立 SSH 隧道:

$ ssh -f -N -R 1234:localhost:22 user@your_machine_ip

隧道设置完成后,您可以使用以下命令轻松地通过 ssh 连接到远程服务器:

$ ssh -p 1234 user@localhost

请注意,您需要设置 ssh 密钥才能自动登录(无需输入密码)。如果您想以交互方式创建 SSH 隧道,可以删除选项-f -N。有关更多信息,请访问man ssh

答案2

如果你正在运行较新版本的 OpenSSH(7.3+),那么你可以使用ProxyJump它神奇地将所有东西烘焙在一起:

ssh -J windows_machine remote_server

~/.ssh/config看起来像:

Host remote_server
        HostName remote_server
        ProxyJump windows_machine
        User myname

ProxyJump支持完整的 SSH 语法,因此如果您处于jim打开状态windows_server并且它使用2222ssh端口,remote_server则 IP 为,192.168.0.110然后windows_server您可以写入:

Host remote_server
        HostName 192.168.0.110
        ProxyJump jim@windows_machine:2222
        User myname

仍然只要跑ssh remote_server就可以到达那里。


如果你正在运行旧版本的 SSH,请使用代理命令- 这允许您告诉 SSH 在运行实际的 SSH 命令之前首先运行命令来建立代理连接。

ssh -o ProxyCommand='ssh -W %h:%p windows_machine' remote_server

这使用 SSH-W选项,这是更神秘的netcat 语法

请注意,当您运行时,ssh remote_server您现在处于windows_machine您需要确保使用remove_server 从跳转框而不是您机器的 IP - 这些可能是相同的。

然后您可以将该指令添加到您的~/.ssh/config文件中:

Host remote_server
  HostName remote_server
  User myname
  ProxyCommand ssh -W %h:%p windows_machine

这意味着如果remote_server 从那时起,windows_machine您就可以将其放入配置中并仍然使用ssh remote_server

答案3

与其试图绕过一切并创建一条复杂的路径,难道你不能直接请求允许从你的桌面到服务器的 SSH 吗?如果你有这个需要,而且你应该访问服务器,我不明白为什么你的请求会被拒绝。

相关内容