0%

SSH端口转发

SSH服务器的安装配置请参阅SSH服务器

SSH的一般使用请参阅SSH使用指南

本文内容是总结SSH的端口转发功能的一些使用经验。

一些用到的ssh参数的说明:

  • -4 强制使用IPv4
  • -f 在后台背景执行命令
  • -N 不执行远程命令
  • -L 绑定本地端口
  • -R 绑定远程端口
  • -D 绑定动态端口

本地端口转发 Local Port Forwarding

场景:

本地主机 -> ( 互联网 ) -> 网关服务器 -> 内部服务器。

所访问的服务器只有内网IP,无法通过互联网从外部直接访问时,可通过其所在子网的网关服务器进行间接访问。

使用本地端口转发的方式访问远程的内部服务器,避免了先ssh登录网关服务器,再在网关服务器上ssh登录内部服务器的麻烦。

假设:

  • 所访问的网关服务器的公网IP是12.34.56.78,ssh端口为51022,用户名是root。
  • 所访问的服务器的内网IP是192.168.0.100,ssh端口为22,用户名与当前用户相同。
  • 使用本地主机的8022端口作转发端口

操作:

在本地执行如下操作:

在背景中开启本地端口转发
1
ssh -4fNL 8022:192.168.0.100:22 -p 51022 root@12.34.56.78

此时,访问本地8022端口等同于访问目标服务器的22号端口。在本地执行ssh localhost -p 8022即可登录目标服务器。

远程端口转发 Remote Port Forwarding

场景:

本地主机 -> ( 互联网 ) -> 中继服务器 -> ( 防火墙 ) -> 目标服务器。

所访问的目标服务器由于处在防火墙后等原因,只能通过中继服务器进行远程登录。

注意:需要在中继服务器上的sshd配置中,将 GatewayPorts 设为 yes。

假设:

  • 所访问的目标服务器的公网IP是22.33.44.55,ssh端口为1122,用户名是laozhao。
  • 所访问的中继服务器的公网IP是66.77.88.99,ssh端口为2222,用户名是root。
  • 使用中继服务器的3322端口作转发端口

操作:

在目标主机上执行

1
ssh -4fNR *:3322:localhost:1122 -p 2222 root@66.77.88.99

此时访问中继服务器的3322端口即相当于在中继服务器上访问目标服务器的1122端口,在本地执行ssh laozhao@66.77.88.99 -p 3322即可登录目标服务器。

动态端口转发 Dynamic Port Forwarding

场景:

本地主机 -> ( 互联网 ) -> 代理服务器 -> ( 互联网 )。

在本地绑定的端口上的网络请求,将转发到代理服务器上的动态端口。

假设:

  • 代理服务器的公网IP是66.77.88.99,ssh端口为2222,用户名是root。
  • 使用本地的1080端口作转发端口

操作:

在本地主机上执行

1
ssh -4fND 1080 -p 2222 root@66.77.88.99

此时,在火狐中设置scocks5代理为 localhost:1080,即可通过代理服务器的动态转发访问互联网了,你懂的!

通过代理服务器访问github

可能你访问github也比较困难,那么你应该设法通过代理访问试试。

假设:代理服务器的公网IP是66.77.88.99,ssh端口为2222,用户名是root。

将如下设置添加到你的~/.ssh/config中:

1
2
3
Host github.com
User git
ProxyCommand ssh -qW %h:%p -p 2222 root@66.77.88.99

另外,如果想利用本地的代理服务客户端,也可以在代理服务器和本地都安装sudo pacman -S netcat软件,并将如下设置添加到你的~/.ssh/config中:

1
2
3
Host github.com
User git
ProxyCommand nc -x 127.0.0.1:1080 %h %p

此时对ssh://git@github.com的访问将由你的代理服务器进行转发,速度应该会快了不少。

X11 Forwarding

如果你需要在本地远程执行服务器上的图形应用程序,可以使用X11 Forwarding。

假设:

  • 远程服务器的IP是192.168.0.100,ssh端口为22,用户名与当前用户同。
  • 想要执行远程服务器上安装的mousepad软件。

首先在服务器上使能X11 Forwarding功能:

1
2
3
sudo pacman -S xauth
sudo echo 'X11Forwarding yes' >> /etc/ssh/sshd_config
sudo systemctl restart sshd.service

以后,只要执行ssh -X 192.168.0.100 mousepad就可以在本地的桌面上打开远程的mousepad编辑器了。