web-dev-qa-db-ja.com

パスワードを何度も入力せずに、SSH pubキーをサーバーのリストに伝播するにはどうすればよいですか?

最近、サーバーのリストへのユーザー名/パスワードのアクセス権が与えられました。SSH公開鍵をこれらのサーバーに伝播して、より簡単にログインできるようにしたいと考えています。

明確にするために:

  • これを自動化するために利用できるリモートサーバー上の既存の公開キーはありません。
  • これは、これらのサーバーにログインするのが初めてであり、これらにアクセスするために常に資格情報を入力する必要がないようにしたい
  • また、forループでssh-copy-idを使用してパスワードを何度も入力したくありません。
27
slm

xargssshpassおよびssh-copy-idを使用した別の方法:

資格情報がcredentials.txtuser:password@server形式であると仮定します。

$ cat credentials.txt
root:[email protected]
foo:[email protected]
bar:[email protected]

あなたがすることができます:

tr ':@' '\n' < credentials.txt \
| xargs -L3 sh -c 'sshpass -p $1 ssh-copy-id $0@$2'

注:使用後は必ずcredentials.txtを削除してください。

7
FloHimself

Ansible の使用はかなり簡単です。 <USER>を実際のログイン名に置き換えるだけです

$ cd /path/to/public/key

$ cat<<END > hosts
  Host1.example.com
  10.10.10.10
  END

$ ansible -i hosts all --ask-pass -u <USER> -m authorized_key \
      -a "user=<USER> key='$(cat id_rsa.pub)'"        
6

ClusterSSHは各マシンのウィンドウを提供し、すべてのウィンドウを制御する共通のウィンドウを備えています。

私たちが10台のマシンを話しているなら、これはうまくいくでしょう。私たちが100台のマシンを話している場合、多くのウィンドウがあります。

ClusterSSHの優れている点は、あるマシンが他のマシンと100%異なる場合、ウィンドウをクリックして、すべてのマシンへのキーストロークの送信に戻る前に、そのマシンにのみキーストロークを送信できることです。

6
Ole Tange

法案に適合する可能性のあるいくつかのこと:

他の回答で述べたように、sshpassがおそらく最も簡単な解決策です。

0
Richlv