質問: VPS環境のUbuntu 18.04サーバーを使っていて、パソコンAから公開鍵認証でssh接続できるように設定した後、rootユーザーとしての接続とパスワード認証による接続を禁止しました。 この環境下で新しくパソコンBからサーバーに接続したくなったとき、どのようにすればスムーズに行えるでしょうか? sshでログインしたいのはパソコンAの場合と同じユーザーです。 今まではパソコンBで新しく鍵ペアを作成し、USBメモリ経由で公開鍵をパソコンAにコピーし、パソコンAから`ssh-copy-id`していましたが、もっと簡単な方法があれば知りたいです。 ### 補足 似たような質問が既に投稿されていましたが、微妙に目的が違うので新しい質問として投稿しました。 * VPS環境で「rootログイン禁止、パスワード認証禁止」としている場合、秘密鍵を紛失したらSSH接続不可?
回答: 公開鍵認証のメリットは、公開鍵は秘匿しておく必要が無いということです。安全な経路でなくてもよいので、すでにSSHログイン可能なパソコンAで受け取れさえすれば何でもよいです。 * 自分宛にメールで送る * 共有フォルダ * オンラインストレージ(Dropbox、Google Drive、etc) * ドキュメント共有(Onenote、Google Docs、etc) 自分にとって一番簡単な方法でやってください。 さて、パソコンAは単に公開鍵を中継しているに過ぎません。サーバが直接アクセス可能な経路があれば、そちらを経由しても問題ありません。例えば、 ``` % curl 'オンラインストレージの共有機能で取得したURL' >> .ssh/authorized_keys ``` ということもできます。 新しい鍵だけではなく、鍵のリスト自体を共有しておいてもかまいません。サーバとクライアントの組み合わせが多い場合、サーバが増えたときはそのファイルをコピーすればすみます。クライアントが増えたときも、どれが登録済みでどれがまだ、など考えずに機械的にコピーするだけでよくなります。 開発環境など自分で管理しているサーバであれば、公開鍵認証をスクリプト経由で行うよう設定することもできます(sshdのAuthorizedKeysCommandオプション)。私はちょっとしたスクリプトでDropboxにおいた公開鍵のリストを読み込ませています(これこのまま使うとどのユーザーでも同じリストを使ってしまいます。あと、本来不必要なファイルの保存をしています)。 あなたがGithubのユーザーであれば、 でGithubに登録した公開鍵を取得できます。AWSに登録した公開鍵も、API経由で取得できるようです。 ここまでで注意が一つあります。公開鍵自体は秘匿する必要はありませんが、不正な鍵を登録されることには注意が必要です。例えばオンラインストレージを使う場合、そのファイルを第三者が読めてもかまいませんが、書き込みが可能だと第三者が自分の鍵を登録できてしまいます。 公開鍵認証のもう一つのメリットは、鍵を個別に無効にできることです。鍵の入った端末や媒体を紛失したとかウィルス感染等のセキュリティ侵害が起きたときに、そのPCに保存されていた鍵だけ無効化(authorized_keysから削除)すれば、ほかの鍵は触る必要がありません。 鍵の管理の原則として秘密鍵をコピーするなと言われるのは、秘密鍵がローカルの環境に閉じておらず安全に秘匿されていることが保証できなくなる(オンラインでは無論、媒体経由のオフラインのコピーでも、「媒体を紛失したが気づいていない」ということが起きえます)のと同時に、鍵が共有されていると鍵の無効化の障害になるためです。 (なお、鍵のBANを効率的かつ確実に行うという観点でも、鍵の管理を機械的にできるようにしておくことはメリットがあります)