リモートコンピュータの秘密鍵ソリューション?

リモートコンピュータの秘密鍵ソリューション?

クローン、統合タスク、展開、バックアップなどのサービスを提供できる複数のサーバーを管理する必要があります。これらすべての共通点は、時々他のサーバーへのアクセスが必要であることです。

質問:私は明らかな理由で私の秘密鍵をこれらのすべてのサーバーに伝播したくありません。

私はプロキシ転送と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/":)。

関連情報