O comando SSH se comporta de maneira diferente em Expect Script

2

Estou usando este comando no servidor1

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

para anexar o conteúdo de id_rsa.pub do Server2 ao authorized_keys do Server1.

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

#!/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 id_rsa.pub do Server2 é anexado ao authorized_keys do Server2.

Qual seria a sintaxe correta?

    
por Dante Varona 16.06.2014 / 21:34

1 resposta

3

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

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

    
por 16.06.2014 / 23:39