为何公网IP无法访问Raspberry Pi3的SSH,但黑客机器人却能连接?
你的Raspberry Pi SSH问题拆解与解决
嘿,我来帮你理清楚这俩事儿——为啥日志里一堆来自中国地址的失败登录,还有为啥你自己用公网IP连不上你的Pi。
一、先搞懂那些恶意登录尝试
那些日志里的记录是自动化的暴力破解脚本在搞事:它们会遍历全网的公网IP,扫描常见服务端口(比如SSH默认的22),一旦发现端口开放,就用预设的通用用户名(root、operator、webmaster这些)轮番试密码。你看到的“中国地址”只是这些脚本所在服务器的IP归属地,不是针对你个人,纯粹是你的Pi刚好被扫到了而已,这种情况在暴露公网的设备上太常见了。
二、解决你自己连不上的核心问题
既然日志里已经有外部请求打到你的Pi上,说明路由器的端口转发大概率是开了的,但你连不上可能有这些原因,按顺序排查:
1. 先排除内网访问公网IP的限制
很多家庭路由器不支持NAT回环(简单说就是内网设备用公网IP访问自己的端口转发服务),这是很常见的坑。你可以先测试:
- 用手机开流量(别连家里WiFi),用PuTTY连你的公网IP,看能不能连上。
- 如果手机能连,那就是路由器的NAT回环问题,你在内网的时候直接用Pi的局域网IP(可以在Pi上跑
hostname -I查看)连就行。
2. 确认路由器端口转发规则是否正确
登录你的路由器管理后台,找到“端口转发”/“虚拟服务器”选项,检查这几点:
- 外部端口是不是22(如果你改了SSH端口,要对应)
- 内部IP是不是你的Pi的局域网IP(确保没输错)
- 内部端口是不是22(SSH默认端口)
- 协议是不是TCP(SSH只走TCP)
3. 检查Pi上的防火墙设置
Raspbian Stretch默认没开防火墙,但如果你手动装了ufw之类的工具,得确认允许SSH访问:
- 先通过HDMI显示器或者内网SSH登录Pi,运行
sudo ufw status查看规则。 - 如果没看到允许22端口的规则,就跑
sudo ufw allow ssh来放行,再重启防火墙sudo ufw reload。
4. 确认Pi的SSH服务是否正常运行
在Pi上运行sudo systemctl status ssh,看服务是不是显示active (running)状态:
- 如果没运行,用
sudo systemctl start ssh启动,再用sudo systemctl enable ssh设置开机自启。
5. 核对PuTTY的设置
- 确认PuTTY里的“主机名”是你的公网IP,“端口”和你路由器转发的端口一致(默认22)。
- 如果之前改了SSH端口,要确保PuTTY、路由器转发规则、Pi的SSH配置这三者的端口完全匹配。
三、安全加固建议(既然已经被扫描到了)
既然你的SSH端口已经暴露在公网,赶紧做这些加固,避免被破解:
- 修改SSH默认端口:编辑
/etc/ssh/sshd_config,找到Port 22改成一个高端口(比如2222),然后重启SSH服务sudo systemctl restart ssh,同时更新路由器的端口转发规则到新端口。 - 禁用root用户登录:在
sshd_config里找到PermitRootLogin yes改成PermitRootLogin no,这样就算脚本猜中用户名也没法用root登录。 - 启用密钥登录,禁用密码登录:这是最安全的方式——生成SSH密钥对,把公钥放到Pi的
~/.ssh/authorized_keys文件里,然后在sshd_config里设置PasswordAuthentication no,重启SSH。 - 安装fail2ban:这是个防暴力破解的工具,会自动封禁多次失败登录的IP。安装命令:
sudo apt install fail2ban,默认配置就够用,它会自动监控auth.log并封禁恶意IP。
内容的提问来源于stack exchange,提问作者alxc
相关产品推荐
相关产品推荐

