Ich verwende diesen Befehl auf Server1
~# ssh root@Server2 /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
um den Inhalt von Server2 id_rsa.pub
an den authorized_keys
von Server1 anzuhängen.
Es funktioniert, wenn ich es manuell mache, aber wenn ich es in einem Expect-Skript mache:
#!/usr/bin/expect
set timeout 60
spawn ssh root@[lindex $argv 0] cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
expect "yes/no" { send "yes\r"
expect "*?assword" { send "[lindex $argv 1]\r" }
} "*?assword" { send "[lindex $argv 1]\r" }
interact
Wenn ich das Skript verwende, id_rsa.pub
wird das von Server2 über das authorized_keys
von Server2 angehängt.
Was wäre die richtige Syntax?
Antwort1
Es sieht so aus, als ob expect keine Shell ist, also wird es >>
als Argument an ssh übergeben, anstatt es zu interpretieren.
Versuchenspawn bash -c "ssh root@[lindex $argv 0] cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys"