Я пытаюсь включить пароль ssh для входа в систему из кластера хостов. Таким образом, после того, как я генерировать id_rsa.pub по ssh-keygen
, Я хочу скопировать его на всех остальных с помощью этой командыИспользование Expect для копирования файла с одного пульта дистанционного управления на другой
ssh -t [email protected] "ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]"
Эта команда работает в оболочке, но я просто не мог сделать его spawn
, как ожидается. То, что я сейчас пытаюсь это:
#!/usr/bin/expect
#exp_internal 1
set user_name [lindex $argv 0]
set password [lindex $argv 1]
set client [lindex $argv 2]
set server [lindex $argv 3]
set timeout -1
spawn ssh -t [email protected]$client
expect {
# first connection, no public key in ~/.ssh/known_hosts
"yes/no" {
send -- "yes\r"
exp_continue
}
# already has public key in ~/.ssh/known_hosts
"password:" {
send -- "$password\r"
}
}
expect "$ "
send -- "ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]$server\r"
expect {
"yes/no" {
send -- "yes\r"
exp_continue
}
"password:" { send -- "$password\r" }
}
Я отлажена его и обнаружил, что последний sending
работал, но результат просто неожиданным, как и в скорлупе. Я также попытался объединить send -- "ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]$server\r"
и spawn ssh -t [email protected]$client
, а затем обработать их как по иерархическому пути с ожиданием, так и по результату. Сценарий просто не мог двигаться дальше, чтобы завершить последнюю отправку password
, или мы можем сказать, что он не мог отправить на правильный канал. Я действительно запутался прямо сейчас.
Может ли кто-нибудь помочь?
Настоятельно ценю помощь от вас! Спасибо огромное!
Если у вас есть хорошая рекомендация или учебные пособия, я также буду очень благодарен за ваш обмен!
Спасибо @whjm это просто работает гладко! Похоже, что последний 'ожидать '$' 'действительно много значит здесь. – Hearen