EC2にSSHできなくなって非常に焦りました。
ssh_exchange_identification: read: Connection reset by peer
「う・・・。」
思い当たるフシはありました。
最近、/varディレクトリ下のパーミッションを誤って大胆にいじってしまい、色々なサービスの起動に支障をきたしていたので、おそらく/var/runあたりのPIDファイルのパーミッションが間違っているとかそんな理由だろう、、
と、かれこれ悩みつつも2時間くらいで復旧できたので、そでの手順をメモしておきます。
1)まず問題のEC2のボリュームのスナップショットを取ります。
2)次にスナップショットから新しいボリュームを作成。
3)別のEC2を立ち上げ、2)で作ったボリュームをアタッチします。
lsblkコマンドでデバイス名を確認する。下の/dev/xvdf1のデバイスがアタッチされているものの、まだマウントされていないのが分かる。
[root@ip-172-31-19-187 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdf 202:80 0 10G 0 disk
└─xvdf1 202:81 0 10G 0 part
4)マウント先のディレクトリを作ってそこにマウント。
[root@ip-172-31-19-187 ~]# mkdir /mnt/temp
[root@ip-172-31-19-187 ~]# mount /dev/xvdf1 /mnt/temp/
5)ログを見てSSHできない原因を調べて、問題箇所を直す。
[root@ip-172-31-19-187 temp]# tail /mnt/temp/var/log/messages
Aug 13 20:43:56 ip-172-31-5-99 sshd[11480]: fatal: /var/empty/sshd must be owned by root and not group or world-writable.
なるほどね。/var/emptyの所有者がnginxとかおかしなことになってました。
正しい所有者はrootのようなのでchownで修正。
6)直したデバイスをアンマウント、EC2を停めてからボリュームをデタッチ。
7)元のEC2に直したボリュームをアタッチして起動。
8)SSHできた!!助かった。
こんな感じでした。