Нет, в rsync
нет возможности указать несколько пунктов назначения. Вам нужно будет вызвать команду несколько раз. Если у вас много целей, вы можете подумать об использовании вместо этого сетевой файловой системы - возможно, это лучше подходит для вашей проблемы.
Решение следующее.
1) На вашем терминале создайте массив со всеми хостами/IP-адресами, которые вы хотите скопировать id_rsa.pub. Например
hosts=( host1 host2 192.168.100.200 host4 )
2) Создайте ожидаемый файл, сохраните его и сделайте исполняемым, используя chmod +x имя файла
#!/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
Дождитесь, пока открытый ключ будет скопирован на все хосты.
Хорошо, наконец-то у меня есть это. Теперь работай идеально. В скрипт после цикла for добавляю эту строку:
/usr/bin/expect <<EOD
и conde ожидаемой процедуры типа:
spawn ssh-copy-id -i test.pub root@<name_host>
expect "Enter passphrase for key"
send "$pass\n"
expect eof
EOD
и работает идеально!
Еще раз спасибо за объяснение и помощь val0x00ff
;)