クローン、統合タスク、展開、バックアップなどのサービスを提供できる複数のサーバーを管理する必要があります。これらすべての共通点は、時々他のサーバーへのアクセスが必要であることです。
質問:私は明らかな理由で私の秘密鍵をこれらのすべてのサーバーに伝播したくありません。
私はプロキシ転送とkeychain.shが好きですが、それを行うには常にこれらのサーバーに接続する必要があります。
この問題に対する解決策は、秘密鍵を1つのサーバーにのみ配置してから、すべてのリモートサーバーへの接続を開いたままにすることです(tmux / screenを使用)。しかし、それは理想的ではありません。
別の解決策は、秘密鍵に非常に強力なパスワードを入力して実際にこれらのサーバーに展開することですが、これも理想的ではありません。
私が見落とした他のオプションはありますか?
答え1
これを行う2つの鍵のない方法とパスワードのない方法を考えることができますが、どちらも最適ではありません。セクションの後、SSHキーを使用してこれを行うのがどれほど簡単かを説明します。
方法1:NFSまたは同様のもの。共通ファイルシステムを使用すると、ファイルをプライベートゾーンにダンプし、cron操作を介して関連システムから検索できます。ただし、これはネットワークファイルシステムと同じくらい安全です。
方法2:ログイン。 SSHは、異なるシステムで同じユーザー名とパスワード(そしてソルト?)を持つユーザーがパスワード(またはキーなし)(デフォルトでは/etc/shadow
ギリシャ語のハッシュを証拠として使用)システム間で直接接続できるという点でRSHから多くを継承します。 。 SSHを使用してこれを簡単に実行できるかどうかはわかりませんが、残念ながら設定方法のガイドもありません。
適切なセキュリティを確保するには、各サーバーに秘密鍵が必要です。コメントでこれらすべてを維持したくないことを見ましたが、ほとんど避けられないことです。秘密鍵を作成して削除することは、アクセス権が必要なシステムに追加するのと同じくらいauthorized_keys
簡単でなければなりません。
何百ものシステムについて話している場合でも、プライベートシステムは次のようにキー生成をスクリプトで作成できます(これはプライベートシステムにrootアクセス権があると仮定します)。
cd /tmp
mkdir .ssh
chmod 700 .ssh
for server in node{1..100}; do
echo "Generating key for $server..."
ssh-keygen -t rsa -b 4096 -C "root@$server" -k .ssh/id_rsa
cat .ssh/id_rsa.pub >> authorized_keys
scp -pr .ssh root@$server:
rm .ssh/id_rsa*
sleep 1
done
for server in node{1..100}; do
cat authorized_keys |ssh root@$server "cat >> .ssh/authorized_keys"
done
sleep 1
これらのキーはすべて同じシステムで生成されるため、これを使用します。これは、より多くのランダム性を確保するための完全性チェックです。認証された鍵のリストを共有するには各公開鍵が必要であるため、2つのループが必要です。
これで、node1からnode100までの名前の100個のサーバーがあり、各サーバーには他のすべてのサーバーへのルートアクセスを許可するキーがあります。
(私はユーザーがrootとしてログインできるようにしません。このsudo
ツールはより大きな制御と責任を提供します。上記のスクリプトが正しく機能するためには、各ノードでrootのAuthorized_keysにpubkeyを追加する必要があります。が必要NOPASSWD
で、私のコードをいくつか修正しました(例scp -pr .ssh $server:/tmp && ssh $server "sudo chown root:root /tmp/.ssh && sudo mv /tmp/.ssh /root/"
:)。