SSHD配置后无法远程连接?我踩过的3个血泪坑
大家好,今天想和大家聊聊一个让无数运维人抓狂的问题 – 配置完SSHD服务后死活连不上远程服务器。上周我又双叒叕在这个问题上栽了跟头,折腾了整整两小时才发现是个低级错误。痛定思痛,我决定把最常见的3个坑整理出来,希望能帮到正在抓耳挠腮的你。
坑1:防火墙忘了放行22端口
这个坑我至少踩过三次!每次都会拍着大腿说”我怎么又忘了这个”。明明sshd_config配置得漂漂亮亮,服务也重启了,但就是连不上。这时候一定要先检查防火墙:
# 查看防火墙状态
sudo ufw status
# 或者
sudo firewall-cmd --list-all
# 放行22端口
sudo ufw allow 22
# 或者
sudo firewall-cmd --add-port=22/tcp --permanent
sudo firewall-cmd --reload
小贴士:如果你像我一样经常忘记这个步骤,建议把防火墙配置写在sshd配置文件的注释里,这样下次修改时就能看到提醒。
坑2:SELinux在暗中作祟
有一次我给客户部署环境,所有配置检查了N遍都没问题,但就是连不上SSH。最后发现是SELinux在搞鬼。如果你也遇到这种情况,可以试试:
# 临时关闭SELinux测试
setenforce 0
# 如果这样能连上,说明确实是SELinux问题
# 永久解决方案是修改策略或端口
semanage port -a -t ssh_port_t -p tcp 22
说真的,SELinux就像个过度保护的老妈子,虽然是为你好,但有时候真的让人抓狂。我的建议是:生产环境不要直接禁用SELinux,而是学会和它和平共处。
坑3:sshd_config里的语法错误
这个坑最隐蔽也最气人。配置文件看起来没问题,但服务就是起不来。后来我发现sshd对配置文件格式要求很严格:
- 注释不能和配置项写在同一行
- 等号两边不能有空格(如果使用等号格式)
- 某些参数有特定的取值范围
排查方法:
# 检查配置语法
sudo sshd -t
# 查看详细日志
journalctl -u sshd -f
有一次我把PermitRootLogin yes
写成了PermitRootLogin = yes
,就因为这个等号两边的空格,浪费了我半小时生命…
写在最后
这些坑看似简单,但在紧急情况下真的能让人崩溃。我的经验是:每次修改sshd配置后,按照”检查语法→重启服务→本地测试→查看日志”的标准流程走一遍,能省下很多抓狂的时间。
你们在配置SSH时还遇到过哪些奇葩问题?欢迎在评论区分享你的血泪史,让我们一起少走弯路!
太真实了,我第一次配SSH的时候也是卡在防火墙这里半天,简直怀疑人生
第一条我就中枪了!昨天还因为这个加了个通宵 😫