
これらのサーバーで何かを行うときにパスワードを入力しないようにするには、SSH 証明書をリモートにアップロードする必要があります。
ssh-copy-id CptBartender@remote
今...その証明書を 400 台以上のサーバーにアップロードする必要があり、パスワードを何度も入力/貼り付けせずに済む方法を探しています。
質問は、Windows (MinGW を使用) でこれを自動化するにはどうすればよいかということです。Cygwin は、地獄の巨大な企業ファイアウォールの背後にあると思われるため、おそらく選択肢にはなりません。
これまで私は次のことをやってきました:
- すべてのリモートを反復処理するスクリプトを作成しましたが、すべてのリモートに対してパスワードを要求します。
- パスワードを渡そうとしたが
yes
無駄だった - について読んだ
expect
が、MinGWで動作させる方法が見つからなかった - 読む
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
。
また、expect
Windows で動作しない場合は、400 台の Linux サーバーのいずれかで実行できるはずです。
(また、数字を考えると、LDAP からキーを取得するか、AD/Kerberos を使用することを検討する必要があるかもしれません。最近の OpenSSH バージョンには、サードパーティのパッチを必要とせずに LDAP 統合するためのフックがあります。)
答え2
上で述べたように、Putty plink ツールを探すことができます。または、将来的には Puppet、Ansible、Chef などの構成管理システムのいずれかを使用することを検討することもできます。これらのいずれかを使用して、すべてのサーバーにすぐに証明書を追加できます。
サーバー番号を探すときは、真剣に検討する必要があると思います。サーバー番号は、ユーザー管理、ファイルとディレクトリの管理、ソフトウェアなど、ほとんどの日常的なサーバー管理タスクに使用できます。