我在 Server1 上使用此命令
~# ssh root@Server2 /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
将 Server2 的内容附加id_rsa.pub
到authorized_keys
Server1 的内容。
如果我手动执行它,但当我在期望脚本中执行它时,它会起作用:
#!/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
当我使用该脚本时,发生的情况是id_rsa.pub
Server2 的 被附加到authorized_keys
Server2 的 上。
正确的语法是什么?
答案1
看起来expect不是一个shell,所以它>>
作为参数传递给ssh而不是解释它。
尝试spawn bash -c "ssh root@[lindex $argv 0] cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys"