如何通过互联网使用SSH远程连接两台Ubuntu计算机
通过互联网远程SSH连接的完整实操指南
嘿,你问到点子上了!本地局域网内的SSH连接确实简单,但要跨互联网远程控制,核心就是解决「公网怎么找到你的本地设备」这个问题,结合你已经查到公网IP的基础,我给你一步步拆解:
1. 先搞定路由器的端口转发(最关键一步)
你的本地设备用的是192.168开头的内网IP,互联网上的请求根本找不到它,所以必须在路由器上做端口转发,把公网的请求引导到你的设备上:
- 先登录路由器管理后台:一般在浏览器输入192.168.1.1或192.168.0.1(具体看路由器底部的标签说明),输入管理员账号密码进去
- 找到「端口转发」「虚拟服务器」这类选项(不同路由器叫法不一样,实在找不到就搜你路由器型号的端口转发教程)
- 添加一条转发规则:
- 外部端口:别用默认的22!选一个1024-65535之间的端口,比如
2222(避免被端口扫描工具盯上) - 内部IP:填你要远程控制的本地设备的内网IP(可以在设备终端输入
ip addr或ifconfig查到,比如192.168.1.105) - 内部端口:填
22(SSH的默认端口) - 协议:选
TCP(SSH用的就是TCP协议)
- 外部端口:别用默认的22!选一个1024-65535之间的端口,比如
- 保存规则,最好重启下路由器让设置生效
2. 检查防火墙配置,别把连接拦在外头
- 本地设备防火墙:比如Linux系统用ufw的话,直接输
ufw allow 22/tcp放行SSH端口;Windows的话去「Windows Defender防火墙高级设置」里,添加允许SSH服务的入站规则 - 路由器防火墙:大多数情况下,设置好端口转发后会自动放行对应端口,但保险起见,去路由器的防火墙设置里确认下你选的外部端口(比如2222)是对外开放的
3. 测试远程连接,验证是否成功
找个非本地局域网的网络(比如手机开热点),在终端里输入SSH命令:
ssh 你的设备用户名@你的公网IP -p 你设置的外部端口
举个例子:你的用户名是pi,公网IP是114.22.33.44,外部端口设的2222,那命令就是:
ssh pi@114.22.33.44 -p 2222
输入设备的登录密码(或者用密钥,后面说安全加固),能连上就说明搞定了!
4. 必须做的安全加固,避免被攻击
直接暴露公网+SSH默认端口等于给黑客开门,这几步一定要做:
- 强制用SSH密钥登录,禁用密码:生成密钥对(本地终端输
ssh-keygen一路回车就行),把公钥传到远程设备的~/.ssh/authorized_keys文件里,然后修改设备的/etc/ssh/sshd_config,把PasswordAuthentication改成no,重启SSH服务(sudo systemctl restart sshd) - 限制登录用户:还是在
sshd_config里加一行AllowUsers 你的用户名,只允许指定用户登录,减少攻击面 - 装fail2ban:Linux系统可以装这个工具,它会自动拦截多次登录失败的IP,防止暴力破解,安装命令比如
sudo apt install fail2ban,装好后启动服务就行
5. 动态公网IP的解决方案
如果你的公网IP是动态的(每次重启路由器都会变),总不能每次都查IP吧?可以用DDNS动态域名解析:
- 很多路由器自带免费DDNS功能,直接在路由器后台绑定一个域名,它会自动把你的动态公IP和域名绑定
- 要是路由器没这功能,也可以用第三方免费DDNS服务,配置好后以后直接用域名代替公网IP连接就行
额外提醒:如果你的运营商给的是共享公网IP(也就是NAT444类型),那端口转发可能没用,这种情况得联系运营商要独立公网IP,或者用内网穿透工具(比如frp这类)来绕开问题
内容的提问来源于stack exchange,提问作者mk1024




