秘密鍵を使用して新しいコンピュータにパスワードのないSSHを設定する方法

秘密鍵を使用して新しいコンピュータにパスワードのないSSHを設定する方法

パスワードのないSSHが100source1を超えるサーバーに設定されていると言うマシンがありますremote1remote2remote100

他のサーバーに同様のパスワードなしのSSH設定を設定する必要があり、公開鍵を100個のサーバー全体のAuthorized_keysファイルsource2にコピーしたくありません。source2

source1同様の設定をするためにサーバーの秘密鍵を使用できますかsource2?この目標を達成する方法は?方法の一つと聞いたのですがssh-agent、その段階についてはよくわかりません。

答え1

すべてのリモコンに独自のルート(別の/rootディレクトリなど)と独自のauthorized_keysファイルがある場合は、そのファイルをすべて編集して新しいキーを追加する必要があります。

for remote in $(seq 100); do 
    cat public_key.pub | ssh "remote$remote" tee -a .ssh/authorized_keys
done

ただし、source1の秘密鍵をsource2に送信することもできます。これにより、両方のコンピュータが同じキーペアを使用します(すべてのリモコンが登録されます)。私はこれがどんな種類の衝突も引き起こさないと思いますが、2つのキーを持つことは私にとってより自然なようです。実際、すべてのコンピュータが同じネットワーク上にあり、同じユーザーが管理する可能性が高いため、1つの破損したキーがシステム全体を損傷する可能性があります。したがって、2つを持つとしてもセキュリティが強化されるわけではありません(どこかに1つでもルートになるには十分なためです)。

答え2

取るアプローチは、特定のシナリオによって異なります。すべてのサーバーのユーザーがリモートホストに新しいキーを追加するときに認証に使用できるキーを既に持っている場合に最適ですauthorized_keys。それ以外の場合は、各ホストにパスワードを入力する必要があります。

SSHキーをリモートシステムに自動的にコピーする最も簡単な方法はを使用することです。これにより、呼び出されるサーバーがssh-copy-idある場合は、次のように実行できます。remote1remote100

for server in $(seq -f 'remote%.0f' 1 100); do
    ssh-copy-id -i ~/.ssh/id_rsa "$server"
done

その後、自動的にid_rsa公開鍵をすべてのサーバーに順番にSSHに接続し、公開鍵をauthorized_keys。これがサーバー上の唯一のキーである場合、プログラムはssh-copy-id実際にサーバーにSSHを介して接続する必要があるため、これを追加するためのパスワードの入力を求められます。

さらに自動化する1つの方法は、パスワードを使用した自動ログインなどの機能を使用することですexpect。 OpenSSHのsshクライアントには、パスワードを指定するコマンドラインオプションがありませんsshpass

関連情報