53315


VPS環境のUbuntu
18.04サーバーを使っていて、パソコンAから公開鍵認証でssh接続できるように設定した後、rootユーザーとしての接続とパスワード認証による接続を禁止しました。

この環境下で新しくパソコンBからサーバーに接続したくなったとき、どのようにすればスムーズに行えるでしょうか？
sshでログインしたいのはパソコンAの場合と同じユーザーです。

今まではパソコンBで新しく鍵ペアを作成し、USBメモリ経由で公開鍵をパソコンAにコピーし、パソコンAから`ssh-copy-
id`していましたが、もっと簡単な方法があれば知りたいです。

### 補足

似たような質問が既に投稿されていましたが、微妙に目的が違うので新しい質問として投稿しました。

  * [VPS環境で「rootログイン禁止、パスワード認証禁止」としている場合、秘密鍵を紛失したらSSH接続不可？](https://ja.stackoverflow.com/q/40899/19110)


CC BY-SA 4.0
2019-03-06T14:13:38.237
53246
2019-03-09T06:46:40.547
2019-03-06T15:52:19.150
3060
19110
question
ssh
公開鍵認証を使用した環境で、新しいPCからサーバにssh接続する簡単な方法


「紛失時の対策やリスク」を理解した上であれば、都度新しい鍵ペアを作成する代わりにパソコンAで作成した秘密鍵をUSBメモリ経由でパソコンBに複製する方法はいかがですか。


CC BY-SA 4.0
2019-03-06T15:36:20.660
53251
2019-03-06T15:36:20.660
3060
53246
answer


あんまり変わらないですけど Ubuntu 上で鍵ペアを作って、パソコンBに配布すれば多少楽かもしれません。

例えば、Ubuntuに次のようなスクリプトを作ります。

[code]

    $ cat create-add-key
    #!/bin/bash
    KEYNAME="$$"
    ssh-keygen -N "" -C "$USER" -f "$KEYNAME" > /dev/null
    cat "$KEYNAME.pub" >> "$HOME/.ssh/authorized_keys"
    cat "$KEYNAME"
    rm "$KEYNAME" "$KEYNAME.pub"
    
[/code]

実行するときはパソコンAから

[code]

    $ ssh server /path/to/create-add-key > keyname
    
[/code]

とした上で、`keyname` ファイル(秘密鍵) をパソコンBに配布します。


CC BY-SA 4.0
2019-03-07T06:49:32.290
53262
2019-03-07T06:49:32.290
5008
53246
answer


公開鍵認証のメリットは、公開鍵は秘匿しておく必要が無いということです。安全な経路でなくてもよいので、すでにSSHログイン可能なパソコンAで受け取れさえすれば何でもよいです。

  * 自分宛にメールで送る
  * 共有フォルダ
  * オンラインストレージ(Dropbox、Google Drive、etc)
  * ドキュメント共有(Onenote、Google Docs、etc)

自分にとって一番簡単な方法でやってください。

さて、パソコンAは単に公開鍵を中継しているに過ぎません。サーバが直接アクセス可能な経路があれば、そちらを経由しても問題ありません。例えば、

[code]

    % curl 'オンラインストレージの共有機能で取得したURL' >> .ssh/authorized_keys
    
[/code]

ということもできます。

新しい鍵だけではなく、鍵のリスト自体を共有しておいてもかまいません。サーバとクライアントの組み合わせが多い場合、サーバが増えたときはそのファイルをコピーすればすみます。クライアントが増えたときも、どれが登録済みでどれがまだ、など考えずに機械的にコピーするだけでよくなります。

開発環境など自分で管理しているサーバであれば、公開鍵認証をスクリプト経由で行うよう設定することもできます(sshdのAuthorizedKeysCommandオプション)。私は[ちょっとしたスクリプト](https://gist.github.com/suzukis/9143f0bd789905b22300)でDropboxにおいた公開鍵のリストを読み込ませています(これこのまま使うとどのユーザーでも同じリストを使ってしまいます。あと、本来不必要なファイルの保存をしています)。

あなたがGithubのユーザーであれば、<https://github.com/(username).keys>
でGithubに登録した公開鍵を取得できます。AWSに登録した公開鍵も、API経由で取得できるようです。

ここまでで注意が一つあります。公開鍵自体は秘匿する必要はありませんが、不正な鍵を登録されることには注意が必要です。例えばオンラインストレージを使う場合、そのファイルを第三者が読めてもかまいませんが、書き込みが可能だと第三者が自分の鍵を登録できてしまいます。

* * *

公開鍵認証のもう一つのメリットは、鍵を個別に無効にできることです。鍵の入った端末や媒体を紛失したとかウィルス感染等のセキュリティ侵害が起きたときに、そのPCに保存されていた鍵だけ無効化(authorized_keysから削除)すれば、ほかの鍵は触る必要がありません。

鍵の管理の原則として秘密鍵をコピーするなと言われるのは、秘密鍵がローカルの環境に閉じておらず安全に秘匿されていることが保証できなくなる(オンラインでは無論、媒体経由のオフラインのコピーでも、「媒体を紛失したが気づいていない」ということが起きえます)のと同時に、鍵が共有されていると鍵の無効化の障害になるためです。

(なお、鍵のBANを効率的かつ確実に行うという観点でも、鍵の管理を機械的にできるようにしておくことはメリットがあります)


CC BY-SA 4.0
2019-03-09T06:46:40.547
53315
2019-03-09T06:46:40.547
5793
53246
answer