スタックオーバーフローで回答が得られなかったため、この質問が繰り返し発生します。
公開鍵を別のサーバーにインポートする簡単なスクリプトを作成しようとしています。
選択できるオプションを2つ作成しました。 1つはssh-copy-idを使用すること、もう1つは単に公開鍵を別のサーバー上のファイルにコピーすることです。 2番目はうまく機能しますが、ssh-copy-idでは機能しません。これが私が今持っているものです:
ssh-copy-id -i $var1 $i
$var1 は "/path/to/the/public_key.pub" で、 $i は txt ファイルを作成するサーバーです。全体的なアイデアは、私の公開鍵がどこにでもあり、新しい管理者の公開鍵をどこにでも入力するのが好きだということです。うまくいきますが、実行するときにパスワードを入力する必要があります。すべてのソリューションは、パスワードを一度だけ入力することでこれを行うことができます。また、キーを追加する前に新しい行を入力したいと思います。ただし、ssh-copy-idを使用してこれを行う方法の解決策はありません。
答え1
解決策はこれです。
1)端末からid_rsa.pubをコピーしたいすべてのホスト/ IPアドレスを含む配列を作成します。例えば
hosts=( host1 host2 192.168.100.200 host4 )
2) 予想ファイルを作成して保存し、実行可能にします。chmod +x filename
#!/usr/bin/expect -f
if { $argc != 4 } {
puts stderr "usage: ./expt host pass user keyfile"
exit 2
}
set host [lindex $argv 0]
set pass [lindex $argv 1]
set user [lindex $argv 2]
set keyfile [lindex $argv 3]
spawn ssh-copy-id -i $keyfile $user@$host
expect "assword:"
send "$pass\n"
expect eof
3) ホストを保持しているアレイを繰り返し送信します。id_rsa.pub
for host in "${hosts[@]}" ; do ./expt "$host" Y0urPassword username ~/.ssh/id_rsa.pub ; done
公開鍵がすべてのホストにコピーされるのを待ちます。
答え2
さて、いよいよこれを得ました。今完璧に動作します。 forループの後のスクリプトに次の行を追加しますか?
/usr/bin/expect <<EOD
必要なプロセスの条件は次のとおりです。たとえば、次のようになります。
spawn ssh-copy-id -i test.pub root@<name_host>
expect "Enter passphrase for key"
send "$pass\n"
expect eof
EOD
そしてそれは完璧に動作します!
説明と助けにもよろしくお願いします。
;)