SSH-Befehl verhält sich im Expect Script anders

SSH-Befehl verhält sich im Expect Script anders

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.puban den authorized_keysvon 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.pubwird das von Server2 über das authorized_keysvon 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"

verwandte Informationen