如何通过互联网实现SSH端口转发,远程访问无公网设备的SSH服务
如何通过互联网实现SSH端口转发,远程访问无公网设备的SSH服务
看起来你是想通过一台有公网的PC(也就是你提到的192.168.1.50)作为跳板,连接到同一内网里没有公网的设备(192.168.1.55)的SSH服务对吧?你之前试的命令其实是内网环境下用的,在外网笔记本上直接用根本连不上目标PC,我来帮你理清楚正确的操作步骤:
第一步:搞定中间PC的公网访问权限
- 首先在你的中间PC(192.168.1.50)上,执行
curl ifconfig.me(Windows用户可以直接访问网页版的IP查询工具),拿到它的公网IP,比如假设是203.0.113.10 - 登录家里的路由器后台,找到「端口转发」(部分路由器叫「虚拟服务器」)功能,添加一条规则:
- 外部端口:选一个自定义端口(比如2222,尽量别用默认的22,减少被恶意扫描的风险)
- 内部IP:填写中间PC的内网IP
192.168.1.50 - 内部端口:填写中间PC的SSH默认端口22
- 协议选择TCP,保存规则
第二步:在笔记本上执行端口转发命令
你的笔记本现在处于外网环境,打开终端执行这条命令:
ssh -L 2222:192.168.1.55:22 admin@203.0.113.10 -p 2222
- 参数解释:
-L 2222:192.168.1.55:22:把你笔记本的2222端口,通过中间PC转发到目标设备192.168.1.55的22端口admin@203.0.113.10:中间PC的公网IP和登录用户名-p 2222:你刚才在路由器上设置的外部转发端口
执行后输入中间PC的登录密码(如果已经配置了SSH密钥登录就不用输),保持这个终端窗口打开,别关掉!
第三步:连接目标设备的SSH
打开笔记本上的另一个终端窗口,执行这条命令:
ssh 目标设备用户名@localhost -p 2222
比如如果目标设备是树莓派,用户名是pi,就输入:
ssh pi@localhost -p 2222
输入目标设备的SSH密码,就能成功连上啦!
额外小提示
- 为了安全,建议给中间PC和目标设备的SSH都开启密钥登录,禁用密码登录,避免被暴力破解
- 如果你的公网IP是动态的(隔段时间会变化),可以用DDNS服务绑定一个固定域名,这样不用每次记IP
- 要是觉得开两个终端麻烦,也可以用
ssh -J参数直接跳转,命令是:
ssh -J admin@203.0.113.10:2222 目标设备用户名@192.168.1.55
这个命令会直接通过中间PC跳转连接到目标设备,不用单独做端口转发
备注:内容来源于stack exchange,提问作者Shannon




