我们有一个运行 Amazon Linux 2 的 AWS EC2 实例。该实例直到几天前都运行良好。
然后我们使用 Ansible playbook 安装新版本的软件。我们之前多次使用过同样的剧本,没有任何问题。但这一次,在剧本显示成功执行后,我们无法再通过 SSH 连接到实例。 SSH 输出以下内容:
$ ssh -vvv -i .ssh/ourkey.pem [email protected]
OpenSSH_7.2p2 Ubuntu-4ubuntu2.8, OpenSSL 1.0.2g 1 Mar 2016
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: resolving "10.130.35.176" port 22
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to 10.130.35.176 [10.130.35.176] port 22.
debug1: connect to address 10.130.35.176 port 22: Connection refused
ssh: connect to host 10.130.35.176 port 22: Connection refused
从 AWS 控制台,我们尝试停止 EC2 实例并重新启动它,但我们仍然无法通过 SSH 连接到它。
这不是安全组问题,因为我可以通过 SSH 连接到与无法访问的实例位于同一 VPC 和子网中的另一个实例。这两个实例具有完全相同的安全组。
我找到了另一个回答说问题可能是由损坏的/etc/ssh/sshd_config
文件引起的。我从无法访问的实例中分离了 EBS 卷,并将其附加到我可以通过 SSH 访问的另一个实例。然后,我将该卷上的 /etc/ssh/sshd_config 文件与我能够通过 SSH 访问的实例的 /etc/ssh/sshd_config 文件进行比较,发现它们完全相同。
我还查看了/etc/fstab
卷上的内容,因为我看到其他帖子说这可能是罪魁祸首,但看起来还不错:
#
UUID=ec9a77e7-7b7b-4421-a91c-9142206a844a / xfs defaults,noatime 1 1
我还查找了 sshd 日志,我唯一能找到的日志位于 /var/log/secure 中:
Dec 4 19:21:33 ip-10-130-35-176 sshd[3265]: Received signal 15; terminating.
Dec 4 20:10:23 ip-10-130-35-176 sshd[3280]: Server listening on 0.0.0.0 port 22.
Dec 4 20:10:23 ip-10-130-35-176 sshd[3280]: Server listening on :: port 22.
在 AWS 控制台的 EC2 实例上,在操作 > 监控和故障排除 > 获取系统日志下,有一行表示 SSH 守护程序已启动:
Started OpenSSH server daemon.
它还显示登录提示,因此该实例似乎已启动并正在运行:
Amazon Linux 2
Kernel 5.10.96-90.460.amzn2.x86_64 on an x86_64
ip-10-130-35-176 login:
我无法做的一件事是使用 AWS 控制台连接到实例。 EC2 Instance Connect、会话管理器和 EC2 串行控制台方法不适用于我们的实例。
我还看到一个帖子,其中有人建议尝试远程登录它,但这也不起作用:
$ telnet 10.130.35.176 22
Trying 10.130.35.176...
telnet: Unable to connect to remote host: Connection refused
我唯一能做的就是将 EBS 卷挂载到另一个可以通过 SSH 连接的 EC2 实例上。我还可以查看什么来了解为什么我无法通过 SSH 连接到此实例?