新しいサーバーに複数のSSHキーを追加する

新しいサーバーに複数のSSHキーを追加する

SSHキーをコピーするには、次の操作を実行できることはわかっています

ssh-copy-id [email protected]

しかし、新しいサーバーを展開する場合、複数の SSH キーを承認する必要があります。複数の SSH キーを認証する作業を楽にする方法はありますか?

答え1

のマニュアルページを読むとssh-copy-id、ログインに受け入れられないすべてのキーを ssh-agent からコピーする必要があるようです。したがって、 を使用してすべてのキーペアを ssh-agent にロードし、その後にssh-addを使用します。ssh-copy-id

それでもうまくいかない場合は、次のキーを指定してみてくださいssh-copy-id:

for i in ~/.ssh/*.pub; do
  ssh-copy-id -i $i user@host
done

それでもうまくいかない場合は、ansible などを調べてみてください。

# sshkeys.yml
---
- hosts: all
  remote_user: foo
  tasks:
  - authorized_key:
      user: foo
      key: '{{lookup("file", item)}}'
    with_items:
    - id_rsa.pub
    - id_rsa_alternate.pub

次のように使用します:

ansible-playbook -i remote.host.com, -k sshkeys.yml

この方法を選択する場合は、必ず ansible について詳しく読んでください。

答え2

はじめに

この方法は、22 だけでなく任意のポートを持つ SSH サーバーに対して、任意のユーザーにキーをコピーできるため、SSH コピー ID よりもはるかに優れています。また、authorized_keys.org に複数のキーを含めることができ、それらはサーバーの authorized_keys ファイルに追加されます。authorized_keys.org には、1 行につき 1 つの SSH 公開キーがあることを確認してください。

これらの行を好きなように構築する方法はたくさんあります。このcat | ssh cat方法や同様のecho | ssh ssh cat方法は、リモートサーバーに書き込むのに最適なので、忘れないようにすることをお勧めします。cat SOMETHING | ssh SERVER "cat - > REMOTEFILE"または、echo のように使用することもできますecho "SOMETHING" | ssh SERVER "cat - > REMOTEFILE" 。これらは、ローカルで何かを読み取り、別のサーバーに書き込んだり追加したりするのに最適な方法です。このように書き込むcat - > REMOTEFILEか、このように追加します。cat - >> REMOTEFILE

回答

cat authorized_keys.org | ssh -p 22 [email protected] "cat - >> /root/.ssh/authorized_keys"

または

cat authorized_keys.org | ssh -p 22 [email protected] "cat - >> ~/.ssh/authorized_keys"

また、SSH キー (1 つの SSH キー) がある場合:

cat id_rsa.pub | ssh -p 22 [email protected] "cat - >> /root/.ssh/authorized_keys"

または

cat id_rsa.pub | ssh -p 22 [email protected] "cat - >> ~/.ssh/authorized_keys"

すべてを理解するには、これで十分なはずです。

より詳しい情報

注: 「root」の使用に限定されていないことについては、以下のコメントをお読みください。ここでは、すべての部分が変更可能であることがわかります。

[input of ssh keys or keys (as long as new line sepearted)] | ssh -p PORT USER@SERVER "cat - >> AUTHORIZEDKEY"

ボーナス:SSH サーバーがパスワード ログインを許可せず、SSH キーのみを許可しているが、さらに多くのキーをサーバーに知らせたいとします。

  • [input of ssh keys or keys (as long as new line sepearted)] | ssh -i PRIVATE -p PORT USER@SERVER "cat - >> AUTHORIZEDKEY"
  • [ssh キーまたはキーの入力 (改行で区切られている場合)]: これは、改行で区切られている 1 つ以上の公開キーを含むファイルの cat か、完全な公開キーの echo になります (または、改行で区切られている複数の公開キー - echo で改行を区切るには、「echo -e 'line1\nline2'」を使用できます)。
  • PRIVATE: SSHサーバが特定のキーのみを許可する場合、SSHキー認証のみが設定されており、公開キーを持っているため、その公開キーの秘密キーを指定します。
  • USER: 接続してキーを編集するユーザー。rootとして接続する場合(例:[メールアドレス])、anyones キーに「cat - >> /home/anyuser/.ssh/authorized_keys」を追加するか、roots キーに「cat - >> /root/.ssh/authorized_keys」を追加できます。ただし、user1 として接続する場合は、user1 のキー「cat - >> /home/user1/.ssh/authorized_keys」またはもっと簡単に「cat - >> ~/.ssh/authorized_keys」(この最後の方法はどのユーザーにも有効です) のみを変更できます。
  • SERVER: 接続先のサーバー。この場合は server.com です。
  • PORT: サーバー上で受け入れられる SSH サーバー ポート。通常はポート 22 です。ポート 22 の場合は、デフォルトである "-p 22" を省略できます。
  • AUTHORIZEDKEY: これは authorized_keys の場所です。これについては USER ポイントで説明しました。これは "/root/.ssh/authorized_keys" または "/home/user1/.ssh/authorized_keys" または "~/.ssh/authorized_keys" のいずれかになります。

関連情報