400 台を超えるサーバーに SSH 証明書をインストールするにはどうすればよいでしょうか?

400 台を超えるサーバーに SSH 証明書をインストールするにはどうすればよいでしょうか?

これらのサーバーで何かを行うときにパスワードを入力しないようにするには、SSH 証明書をリモートにアップロードする必要があります。

ssh-copy-id CptBartender@remote

今...その証明書を 400 台以上のサーバーにアップロードする必要があり、パスワードを何度も入力/貼り付けせずに済む方法を探しています。

質問は、Windows (MinGW を使用) でこれを自動化するにはどうすればよいかということです。Cygwin は、地獄の巨大な企業ファイアウォールの背後にあると思われるため、おそらく選択肢にはなりません。

これまで私は次のことをやってきました:

  1. すべてのリモートを反復処理するスクリプトを作成しましたが、すべてのリモートに対してパスワードを要求します。
  2. パスワードを渡そうとしたがyes無駄だった
  3. について読んだexpectが、MinGWで動作させる方法が見つからなかった
  4. 読むsshpass- と同じexpect

考えてみたのですAutoItが、もっと良い方法があるはずです...

答え1

PuTTY は、plinkパスワードをコマンドライン パラメータとして受け入れることができます。 に直接相当するものはありませんssh-copy-idが、コマンドを手動で実行するなど、簡単にスクリプト化できます...

plink foo@bar -pw baz "mkdir -p ~/.ssh && echo 'ssh-ed25519 AAAA...' >> ~/.ssh/authorized_keys"

...または、 でファイルをアップロードしますpscp


また、expectWindows で動作しない場合は、400 台の Linux サーバーのいずれかで実行できるはずです。

(また、数字を考えると、LDAP からキーを取得するか、AD/Kerberos を使用することを検討する必要があるかもしれません。最近の OpenSSH バージョンには、サードパーティのパッチを必要とせずに LDAP 統合するためのフックがあります。)

答え2

上で述べたように、Putty plink ツールを探すことができます。または、将来的には Puppet、Ansible、Chef などの構成管理システムのいずれかを使用することを検討することもできます。これらのいずれかを使用して、すべてのサーバーにすぐに証明書を追加できます。

サーバー番号を探すときは、真剣に検討する必要があると思います。サーバー番号は、ユーザー管理、ファイルとディレクトリの管理、ソフトウェアなど、ほとんどの日常的なサーバー管理タスクに使用できます。

関連情報