AWS Lightsail Ubuntu实例因SSH守护进程问题无法登录求助
AWS Lightsail Ubuntu实例因SSH守护进程问题无法登录求助
老哥,这种重启后SSH突然失联但Web服务还正常跑的情况真的够闹心的!我给你梳理几个针对性的排查和解决方向,你一步步来试:
1. 先靠Web服务通道排查SSH守护进程状态
既然你的443端口Web应用能正常访问,说明系统内核和基础服务都在运行,大概率是sshd(SSH守护进程)挂了或者配置出问题了。你可以利用现有Web服务的通道来查:
- 先确认你的PHP环境没禁用系统命令执行(可以先看phpinfo里的
disable_functions项,要是没列exec/system这类函数就可以操作) - 写个简单的PHP脚本放到Web根目录(比如命名为
check_sshd.php),内容如下:
<?php echo "<pre>"; system("systemctl status sshd 2>&1"); echo "\n---分割线---\n"; system("ps aux | grep sshd 2>&1"); echo "</pre>"; ?>
访问这个脚本的URL,就能看到sshd的运行状态。如果显示sshd没在运行,再写个脚本启动它:
<?php system("systemctl start sshd 2>&1"); system("systemctl enable sshd 2>&1"); echo "已尝试启动sshd并设置开机自启"; ?>
2. 试试Lightsail的串行控制台(别用之前的Connect using SSH)
你之前用的「Connect using SSH」是依赖sshd服务的,sshd挂了肯定连不上。你去Lightsail的实例管理页面找「Launch console」——这个是直接连到系统串行端口的浏览器控制台,不管sshd死活,只要系统在跑就能进。
进去后输入系统的用户名密码登录,然后直接操作:
- 查看sshd状态:
sudo systemctl status sshd - 检查sshd有没有监听22端口:
ss -tulpn | grep sshd - 验证sshd配置文件语法:
sudo sshd -t(有错误会直接提示,比如配置项写错了) - 扒sshd日志找问题:
sudo journalctl -u sshd,重点看启动失败或连接被拒的原因——比如是不是开了PermitRootLogin no但你用root登录,或者PasswordAuthentication no但你用密码登录,又或者AllowUsers里没加你的账户
3. 检查实例本地防火墙规则
有时候重启后ufw规则可能被重置或者误改:
- 查看ufw状态:
sudo ufw status,如果是active状态,确认有没有允许22端口的规则 - 要是没允许,就加上:
sudo ufw allow 22,然后重载规则:sudo ufw reload - 也可以检查iptables:
sudo iptables -L -n | grep 22,确认INPUT链里有没有允许22端口的ACCEPT规则
4. 极端情况:挂载磁盘到其他实例排查
如果上面的方法都进不去,就用Lightsail的快照功能来救:
- 给当前实例创建一个快照(Snapshot)
- 要么用这个快照新建一个Lightsail实例,要么把原实例的根磁盘拆下来,挂载到一个你能正常登录的Lightsail Ubuntu实例上
- 挂载后就能访问原系统的文件了,重点查
/etc/ssh/sshd_config配置,还有/var/log/auth.log、/var/log/syslog里的SSH相关日志,总能找到问题根源
备注:内容来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

