利用SSH端口转发访问内部服务器
11/04
本文最后更新于
2023年11月04日,已超过
483天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
上一篇介绍了“Windows 10开启OpenSSH服务”,下面我们可以试验通过Windows 10机器作为中转访问内部Linux服务器。利用的技术是SSH端口转发技术,也叫SSH隧道(tunnel)。
SSH端口转发功能说明网上有很多介绍(关键词:端口转发、ssh隧道、内网穿透、跳板机等等),比如https://developer.aliyun.com/article/1035160这篇文件介绍的很详细。
原理很简单,外部机器A不能直接访问内部服务器C,但有一台服务器B很特殊,它能和A、C都能建立连接,将B作为“中介”、“跳板”,从而实现A访问C的目的。
SSH端口转发参数
ssh -L localport:remotehost:remotehostport sshserver
说明:
localport 本机开启的端口号
remotehost 最终连接机器的IP地址
remotehostport 最终连接机器的端口号
sshserver 转发机器的IP地址
选项:
-f 后台启用
-N 不打开远程shell,处于等待状态(不加-N则直接登录进去)
-g 启用网关功能
port(端口)是进程之间通信的指定窗口,有一些事先约定的端口,比如http协议使用80端口,https使用443端口,SSH协议使用22端口。
理解:所有走localport端口的TCP数据传输都会使用ssh协议通过转发服务器sshserver(“中介”)转发给remotehost:remotehostport,在本地与远程服务器之间建立ssh隧道。
当ssh隧道建立好后,下一步只需要ssh连接本地的localport就可以连接远程服务器了。
ssh -p localport remoteuser@127.0.0.1
注意这里需要使用远程服务器的用户名remoteuser,本地localhost地址127.0.0.1。
使用方法
场景一:本地转发
场景:内部服务器C不允许外部访问,服务器B可以访问C,也可以被外部A访问,现在外部机器A需要访问C。
在A机器上执行:
# 建立ssh隧道
ssh -L 2222:192.168.75.123:22 -fN 192.168.75.122 # 2222是A机器空闲端口
# 需要输入服务器B密码验证
# 连接C
ssh 127.0.0.1 -p 2222
# 需要输入服务器C密码验证
这样就连接到C机器了。
注:查看系统空闲端口方法
# Linux
netstat -nltp | grep 2222
# Windowns
netstat -an | findstr :2222
场景二:远程转发
场景:内部服务器C不允许外部访问,服务器B也不允许外部访问,但B可以主动访问外部服务器A。
服务器B执行:
ssh -R 2222:192.168.75.123:22 -fN 192.168.75.121 # 2222是服务器B空闲端口
服务器A执行:
ssh 127.0.0.1 -p 2222
场景三:动态转发
略
MobaXterm SSH端口转发设置
在Tools->Network->MobaSSHTunnel(port for forwarding)
中设置,创建New SSH tunnel
。
将上面对应的参数填入
SSH隧道建立好后,连接远程服务器C
ssh -p localport remote_user@127.0.0.1
参考资料

