リモートサーバーへのSSH接続時にconnection refusedされた際の対処
概要
リモートサーバーに対していつものようにPuttyからSSH接続をしたところ、以下のようなエラーが発生してつながらなくなってしまっていました。

SSH周りの設定を何も触った覚えがないのにこのようなエラーが発生したため、理由が分からずにかなり混乱しました。落ち着いてエラーをみたところ、権限周りが原因だったため、その一連の対処についてメモしていきたいと思います。
環境
- CentOS7(リモートサーバ)
- Putty(クライアント側)
症状
まず、PuttyからSSH接続した際、いつもならすぐにつながり認証待ちになるのだがなかなか繋がらず、そのままタイムアウトエラーが発生しました。puttyからだと単にConnection timed outとしか表示されないためよくわからず。
コマンドプロンプトから確認
puttyが原因なのかもしれないと思い、Windowsのコマンドプロンプトから接続確認しました。
ssh <user>@<hostname> -p <portnumber>
host xxxxxxxx : Connection refused
結果は同じく、接続拒否という形でアクセスできませんでした。
CentOS7サーバー自体は起動していたため、直接CentOS7へログインして調査をすることにしました。
OpenSSHの状況確認
まずはSSHが動いているのかを確認しました。
systemctl status sshd.service
その結果、SSHがどうもActiveになっていない様子だったため、再度起動し直しました。
sudo systemctl start sshd.service
すると、プロセスの起動中にエラーが発生してうまくサービスが立ち上がらず。
エラーログを確認してみることに。
journalctl -xe
そこで、以下のようなエラー文がありました。
It is required that your private key files are NOT accessible
This private key will be ignored.
key_load_private: bad permissions
sshd.service : main process exited, code=exited, status=1/FAILURE
どうやらrsaキーのパーミッションが良くないせいでキーの読み込み時に無視されてしまっているようです。
対処法
同様の事象をネットで調べたとこ、以下が参考になりました。どうやら権限がオープンすぎるため、絞る必要があるようでした。
https://knowledge.amimoto-ami.com/knowledge/managed-troubleshooting-warning-unprotected-private-key-file
上記を参考にして、以下のコマンドで権限の変更を実施しました。
sudo chmod 0600 ssh_host_ecdsa_key
再びsystemctl start sshd.serviceでSSHを起動してみたところ、今度は無事に起動しました。

そもそもの原因
振り返ってみたところ、このrsaキーが格納されている上位ディレクトリのパーミッションを一括で変更したことがあったことに気が付きました。パーミッションの変更でSSHが影響を受けるという認識がなく、最初は理由が分からず焦りました。
パーミッションの一括変更は予期せぬトラブルやセキュリティリスクが増大するため、注意が必要です。