Ich versuche, Passwort-freie SSH-Anmeldung in einem Cluster von Hosts zu ermöglichen. So, nachdem ich die id_rsa.pub von ssh-keygen
erzeugen, möchte ich kopieren Sie es auf alle anderen von diesem BefehlVerwenden von Erwarten, um eine Datei von einem Remote zu einem anderen zu kopieren
ssh -t [email protected] "ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]"
Dieser Befehl funktioniert in der Schale, aber ich konnte einfach nicht machen es durch spawn
als erwartet. Was bin ich versuche derzeit, ist dies:
#!/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" }
}
ich es ausgetestet und fand heraus, dass die letzten sending
gearbeitet, aber das Ergebnis ist nur unerwartet, da die in der Schale. Ich habe auch versucht, die send -- "ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]$server\r"
und spawn ssh -t [email protected]$client
zusammenzuführen und dann beide in einer hierarchischen expect-send-Weise zu behandeln, aber das Ergebnis ist das gleiche. Das Skript konnte einfach nicht weitergehen, um die letzte password
Sendung zu vervollständigen, oder wir können es sagen, dass es nicht an den richtigen Kanal senden konnte. Ich bin gerade sehr verwirrt.
Konnte jemand ein wenig helfen?
Wirklich zu schätzen die Hilfe von Ihnen! Ich danke dir sehr!
Wenn es ein paar gute Referenz oder Tutorials auf Expect gibt, werde ich es auch für Ihr Teilen zu schätzen wissen!
Danke @whjm es funktioniert einfach reibungslos! Es scheint, dass das letzte "erwarten" $ "hier wirklich viel bedeutet. – Hearen