セットアップしたてのサーバーや SSH キー(クライアント側) を紛失してしまってログインできなくなったサーバーなどに対して、 SSH ログインする方法について記す。 注: 物理的にサーバーにアクセスする方法がある必要がある。
本記事が必要になる状況
設定ミスをしない限り SSH サーバーを有効にして OS をセットアップしても (設定者の意図した方法で) SSH サーバーに苦労せずログインできるはずだが、 Linux OS のセットアップ構成によっては、「SSH有効+SSH鍵ログインのみ+SSHサーバー鍵自動生成」などの構成で設定されることがあり、外部からのログインができない状態でセットアップが完了してしまうことがある (マシンに物理的にアクセスして画面ログインは可)。
なお、一時的にパスワード認証に変更しても問題ないのであれば、そちらの方が簡便と思われる。
手順
画面に直接アクセスできる必要がある。
サーバー側の準備
サーバー側のマシンで、 nc を使って任意のポートをリッスンする (ポート解放等は必要)。受け取ったデータをファイルにリダイレクトするようにする。受け取ったファイルは .ssh/authorized_keys に配置することになる。
$ nc -l 56700 > server_key.txt
鍵の送信
クライアント側のマシンで、サーバーに配置する authorized_keys を準備する ( id_rsa 等の秘密鍵ではないので注意)。このファイルを nc コマンドを使ってサーバーに送る。
$ nc SERVER_ADDRESS 56700 < authorized_keys
^C
サーバー側の鍵配置
鍵を受け取った側では、公開鍵がファイルに保存されているはずなので、念のため確認する。
問題なければ、 .ssh/authorized_keys に権限 600 で保存する。
$ cat server_key.txt
ssh-rsa AAAA...
$ cp server_key.txt ~/.ssh/authorized_keys
$ ls ~/.ssh/authorized_keys -l
-rw------- /home/user/.ssh/authorized_keys
SSH ログインする
画面が必要になる手順は終えたので、 SSH で実際にログインできるか確かめる。ログインには秘密鍵ファイルが必要になる。
ssh SERVER_ADDRESS -i ./path/to/id_rsa
注意点
クラウドサーバーであってもシリアルコンソール機能等から同様のことができると思われるが、 nc のリッスン中は不特定のアクセスが記録されるため注意して利用する必要がある。
また、 nc が受け取ったデータを直接 ~/.ssh/authorized_keys に出力することは危険 (知らない人が鍵を置いてログインできる余地がある) なので、やらないほうがよい。