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"
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?
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"