今天在图书馆想用WindTerm远程连接Ubuntu云服务器,遇到了一个特别折腾的问题:图书馆WiFi连不上,切换手机热点立刻就能登录,折腾了好一会儿才找到根源,特意写篇笔记记录完整排障过程,帮大家避开同款坑。
核心现象总结:同一台电脑、同一个SSH密钥、同一台Ubuntu云服务器,手机热点连接正常,图书馆WiFi连接超时失败;
一、初始问题与错误排查方向
最开始发现连不上的时候,我第一反应是常规网络问题,走了不少弯路,先说说一开始踩的坑:
-
怀疑密钥失效:反复核对本地私钥和服务器公钥配置,确认密钥完全没改动,热点能登直接排除这个可能;
-
怀疑服务器宕机:ping服务器IP能通,网页服务也正常访问,说明服务器在线,网络可达;
二、真正原因:公共WiFi的隐性限制
在Ubuntu服务器上反复测试验证,发现只要用root用户+22默认端口登录,图书馆WiFi就会触发双重限制,这也是大部分公共WiFi(校园网、咖啡馆、图书馆)的通用策略:
-
拦截SSH默认22端口:这是最基础的限制,绝大多数公共网络都会封禁22端口,防止恶意远程爆破;
-
识别并拦截root用户SSH登录:哪怕改成自定义高端口,设备会通过SSH握手包识别用户名,检测到root直接静默丢包,表现就是一直连接超时,不报错也不拒绝;
-
放行普通用户SSH连接:非root的普通用户名不会触发拦截,同一端口、同一密钥,换个用户名就畅通无阻。
补充:Ubuntu系统的管理员权限组为sudo,配置普通用户权限时需注意正确赋予权限,避免登录后无法执行管理员操作,下面会给出详细操作步骤。
三、完整解决步骤
全程不用更换密钥,不用重装服务,四步搞定,亲测Ubuntu系统在图书馆WiFi下能直接登录成功。
步骤1:服务器端创建普通用户(ubuntu),配置管理员权限
先通过手机热点登录Ubuntu服务器,创建普通用户(此处用户名统一用ubuntu),并赋予管理员权限,确保后续能执行sudo操作:
# 1. 创建普通用户ubuntu,自动创建家目录
useradd -m -s /bin/bash ubuntu# 2. 赋予管理员权限(Ubuntu专用,管理员权限组为sudo)
usermod -aG sudo ubuntu# 3. 可选:给用户设置密码(后续sudo需要用到)
passwd ubuntu
步骤2:复用原有SSH密钥,无需重新生成
不用重新生成密钥,直接把root用户的公钥复制给新用户,本地同一个私钥就能登录,省时又方便:
# 创建ssh密钥目录
mkdir -p /home/ubuntu/.ssh# 复制root的公钥文件
cp /root/.ssh/authorized_keys /home/ubuntu/.ssh/# 修正权限(SSH权限要求严格,必须设置,否则密钥登录失败)
chown -R ubuntu:ubuntu /home/ubuntu/.ssh
chmod 700 /home/ubuntu/.ssh
chmod 600 /home/ubuntu/.ssh/authorized_keys
步骤3:修改SSH默认端口22为高端口
为了彻底避开22端口限制,把默认端口改成如21198,同时开放Ubuntu防火墙端口,避免改完端口后无法连接:
# 编辑SSH配置文件
vi /etc/ssh/sshd_config# 找到 #Port 22,修改为22198
Port 21198# 开放防火墙端口(Ubuntu专用,使用ufw防火墙)
# 若未开启ufw,先执行 ufw enable
ufw allow 22001/tcp
ufw reload# 重启SSH服务生效
systemctl restart sshd
vi编辑器操作小贴士:按i进入编辑模式,修改完成后按ESC,输入:wq保存退出。
步骤4:WindTerm切换用户名,重新连接
修改会话配置,换成ubuntu用户,端口改为21198即可:
-
关闭当前会话,右键对应服务器会话,选择【属性】;
-
端口一栏,把22改为21198;
-
认证选项保持原有私钥不变,保存后重新连接。
连接成功!Ubuntu服务器在图书馆WiFi下再也不会超时,流畅登录服务器。
四、额外安全优化(推荐,Ubuntu专用)
问题解决后,建议关闭root用户直接SSH登录,提升Ubuntu服务器安全性,这也是行业通用规范:
# 再次编辑SSH配置
vi /etc/ssh/sshd_config# 找到 PermitRootLogin yes,修改为
PermitRootLogin no# 重启SSH
systemctl restart sshd
后续只能通过ubuntu普通用户登录,需要管理员权限时,输入sudo -i即可切换为root用户,权限完全不受影响。
五、排障核心总结
避坑核心:Ubuntu用户在公共WiFi下,别用root直接SSH登录,别用22默认端口,这是最容易被拦截的两个特征!
-
手机热点能登、公共WiFi不能登,100%是网络策略限制,不是Ubuntu服务器配置问题;
-
Ubuntu管理员权限组为sudo,给普通用户赋权时,需用usermod -aG sudo 用户名,避免报错;
-
SSH密钥可以多用户复用,不用重复生成,修正权限即可正常使用;
-
高端口+普通用户,完美绕过公共WiFi的SSH拦截策略,适配所有Ubuntu版本。
这次折腾下来,发现很多时候Ubuntu服务器远程连接失败,不是技术配置错了,而是公共网络的隐性规则在作祟,搞清楚限制逻辑,对症下药就能快速解决,希望这篇笔记能帮到遇到同样问题的Ubuntu用户~
