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" のいずれかになります。