blu*_*ast 17 firewall ssh port-forwarding
我正在运行 Ubuntu Desktop 作为我的主要机器,我将其称为 D。我想通过 ssh 连接到服务器 S,但防火墙阻止了我。
我可以通过非常繁琐的路径访问服务器 S,涉及 Windows 虚拟机和PuTTY。这使得使用此服务器非常烦人:完全不同的环境,复制/粘贴不起作用,连接到桌面时我无法正确使用桌面(Alt-Tab 被虚拟机破坏)等
我已经验证我可以从服务器 S ssh 到我的台式机 D(与我需要的相反)。
我能否以某种方式从服务器启动“端口转发”或类似功能,以便我可以从我的桌面 ssh 到服务器?
Kha*_*led 32
您可以使用以下命令设置从远程服务器到本地计算机的 SSH 隧道:
$ ssh -f -N -R 1234:localhost:22 user@your_machine_ip
Run Code Online (Sandbox Code Playgroud)
设置隧道后,您可以使用以下命令简单地通过 ssh 连接到远程服务器:
$ ssh -p 1234 user@localhost
Run Code Online (Sandbox Code Playgroud)
请注意,您需要设置 ssh 密钥以进行自动登录(无密码提示)。如果要以交互方式创建 SSH 隧道,可以删除 options -f -N
。欲了解更多信息,man ssh
。
如果您运行的是较新版本的 OpenSSH (7.3+),那么您可以使用ProxyJump
它神奇地将所有内容组合在一起:
ssh -J windows_machine remote_server
Run Code Online (Sandbox Code Playgroud)
你的~/.ssh/config
样子:
Host remote_server
HostName remote_server
ProxyJump windows_machine
User myname
Run Code Online (Sandbox Code Playgroud)
ProxyJump
支持完整的 SSH 语法,因此如果您jim
打开windows_server
并且它使用端口2222
进行 ssh。remote_server
在IP192.168.0.110
距离windows_server
,那么你可以这样写:
Host remote_server
HostName 192.168.0.110
ProxyJump jim@windows_machine:2222
User myname
Run Code Online (Sandbox Code Playgroud)
而仍然只是运行ssh remote_server
到那里。
如果您运行的是旧版本的 SSH,请使用ProxyCommand - 这允许您告诉 SSH 在运行实际 SSH 命令之前先运行命令以建立代理连接。
ssh -o ProxyCommand='ssh -W %h:%p windows_machine' remote_server
Run Code Online (Sandbox Code Playgroud)
这使用了 SSH -W选项,这是更神秘的netcat 语法的简写。
请注意,当您运行时,ssh remote_server
您现在windows_machine
需要确保使用remove_server
来自跳转盒的 IP,而不是来自您机器的 IP - 这些很可能是相同的。
然后,您可以将此指令添加到您的~/.ssh/config
文件中:
Host remote_server
HostName remote_server
User myname
ProxyCommand ssh -W %h:%p windows_machine
Run Code Online (Sandbox Code Playgroud)
这意味着如果remote_server
是一台不同的机器,windows_machine
那么你可以把它放在配置中,仍然只使用ssh remote_server
.