SSHの鍵認証設定を失敗して接続できなくなったサーバーの復旧

Linuxの緊急トラブルのスポット対応案件が増えています。
その中でも、ログインできなくなった。焦るあまり閉じてしまって次に開けなくなったという、初歩的なミスから生じるトラブルに対する対応依頼が急増しています。
そのなかでも、一番大変でしたが、何とか解決できた案件をご紹介いたします。

大問題!SSHで接続できなくなった

お客様から、こんなお問い合わせがありました。

お客様
助けてください。SSHでログインができなくなってしまいました。

当社
それはヤバいですね。なぜログインできなくなりましたか?

お客様
セキュリティを少しでも高めようと、SSHの鍵認証を設定しようとしまして。
自分なりには、設定したつもりだったのですが、なぜかはじかれてしまいます。

当社
なるほど。ほかにユーザはありますか?SSHはそれ以外にどのような設定をしたつもりですか?

お客様
他にユーザはいません。設定としては、rootログインをNGに、パスワード認証のログインをNG、鍵認証のみOKという設定をしたつもりです。

当社
大体の状況はつかめました。今ご利用なさっているサーバーはどんな環境でどこにどういう風に設置されているものですか?

お客様
Serverは、G社のVPSサービスを利用しています。どこに設置してあるのかは不明です。。。

当社
なるほど、G社のVPSサービスなら、おそらく鍵認証を解除し、ユーザパスワードでログインに戻せそうです。対応しましょうか?
お客様
お願いします!本当に助かります!

と、言うやり取りから、実際にSSHの設定をパスワード設定に戻しまずは、SSHで、一般ユーザがパスワード認証でログインできるように設定を修正し、お客様に確認していただきました。
また、次に、何が間違っていたのか、設定を確認しながら、原因を指摘させていただき、鍵認証ができるようになるまでアドバイスを行いました。

鍵認証を失敗するとログインできなくなります!

SSHというのは、遠隔地にあるサーバー機に、リモートログインするためのサーバーです。
目の前にないマシンにログインするために必要なサービスです。
そのため、セキュリティ対策を行っておかないと、クラッカーに、クラッキングされる可能性が出てきます。
現在のSSHのセキュリティ対策の一つは、鍵認証方式です。
鍵と錠前を作り、サーバーに錠前(公開鍵)を置き、それに相対する鍵(秘密鍵)で照合し、一致した場合に初めてログインができます。
また、この鍵には照合するためにパスフレーズを設置することができますので、鍵認証プラスパスワードという設定が可能です。
この鍵は複号しにくい仕様となっていますので、ペアが一致しない状態になると、まずログインができなくなってしまいます、簡単に言えば、自らも制限に引っかかりログインできなくなります。

※重要!【接続時中のセッションは切らないこと!!】

SSHの設定を変更するのにSSHで接続して設定変更をされることも多いと思います。
自分で設定をいろいろ変更したつもりで保存してsshdを再起動していざ接続テスト!

この際に、今繋いでいるセッションを切断(ログアウト)される方も多いのですが、それが一番のトラブルのもとになります。
今繋がっているセッションを切らさずに別のSSHクライアントを立ち上げて接続テストをしてください。
思ったように接続ができなくても従来繋がっていたセッションが残っていればsshの設定を見直すことも可能です。

私はこうやっています!

最初にサーバーを収めて外部から通信が可能な環境を作ったらあとの細かい設定はSSHで行うことが多いです。
まず最初はSSH接続の際の詳細設定ですね。
鍵認証のみで、rootログイン無効。空パスワード無効などの設定を行うわけですが、SSHの設定を修正するのにSSHで接続して行うわけです。
SSHというシステムは、再起動等を行ったとしても現在接続中のセッションを切らさずに再起動を行ってくれます(接続中のセッションを切断することもできます)。
これを利用して安全を確保できます。
sshdの再起動を行っても従来接続していたセッションは切断せず維持しておきます。(timeoutの危険があるのでtopコマンドあたりを叩いておきます)
そして、別のsshターミナルを立ち上げてそちらで接続テストを行います。
10回設定を変更すると1回くらいやはりちょっとしたミスで接続できないコトがありますが、接続済みのターミナルがありますから、そちらでsshdの設定ファイルを再度見直すことで問題なく設定を変更できます。
そして、また新しいターミナルで接続テストを行います。
思ったように接続ができたら次は鍵ナシやrootでのログイン、空パスワードなどでエラーで接続が不能なことを確認してSSHの設定完了となります。
セッションを残すことで安全が買えると思っても大丈夫かと思います。

またよくあるのはSSHの鍵認証やrootログインを無効化は成功しているんだけど、自分の鍵を間違って設置(ディレクトリが違うとか、鍵のファイル名を間違ったとかオーナーやパーミッションのミスなど)してしまってユーザがログインできないなどがあります。
これも、セッションを残したうえで新しいターミナルでログインを試みたらその時点でミスっているかどうかがわかります。
セッションが1つ残っているのでそのセッションでフォルダ・ファイル名やパーミッションなどをチェックすればすぐに原因がわかります。

抜け道を見つけることでSSH接続以外の接続を行いました。

今回たまたまSSH以外の接続方法が準備されているサービスにてサーバーが稼働していたため、運よく、SSHの設定をパスワード認証に戻すことができました。
もし、そのようなものが無い場合、サーバー設置場所でディスプレイ、キーボードを接続しない事には戻せないこともあります。
逆に、そのような抜け道があることも認識しながら、SSHのセキュリティ設定だけではなく、ほかのアタック対策も施すべきであるということがわかりました。
お客様には、その状況も説明し、アドバイスをさせていただきました。