Я должен был сделать это некоторое время назад, но для нескольких серверов, список которых будет меняться с ночи на ночь. Я обнаружил, что иногда scp будет просить сначала добавить хост в список известных хостов или другие сообщения, для которых мне пришлось обрабатывать код. Это может быть похоронено в вашем сценарии.
Это выдержка из того, что в конечном итоге сработало, если это поможет:
expect -c "
spawn ssh-copy-id -i /x/home/$USER/.ssh/id_rsa.pub $USER@$HOST
expect {
\"password:\" {
send \"$PASS\n\"
expect {
\"expecting.\" { }
timeout {exit 1}
\"again.\" {exit 1}
}
}
\"yes/no)?\" {
send \"yes\n\"
expect \"password:\" {
send \"$PASS\n\"
expect {
\"expecting.\" { }
timeout {exit 1}
\"again.\" {exit 1}
}
}
}
}