语境
我正在运行 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
并且它使用2222
ssh端口,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 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 吗?如果你有这个需要,而且你应该访问服务器,我不明白为什么你的请求会被拒绝。