O comando SSH se comporta de maneira diferente no Expect Script

O comando SSH se comporta de maneira diferente no Expect Script

Estou usando este comando no Server1

~# ssh root@Server2 /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

para anexar o conteúdo do Server2 id_rsa.pubao authorized_keysdo Server1.

Funciona se eu fizer isso manualmente, mas quando faço isso em um script esperado:

#!/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

O que acontece quando eu uso o script é que o id_rsa.pubdo Server2 é anexado ao authorized_keysdo Server2.

Qual seria a sintaxe correta?

Responder1

Parece que expect não é um shell, então ele passa >>como argumento para ssh em vez de interpretá-lo.

Tentarspawn bash -c "ssh root@[lindex $argv 0] cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys"

informação relacionada