SSH 命令在 Expect 脚本中的行为有所不同

SSH 命令在 Expect 脚本中的行为有所不同

我在 Server1 上使用此命令

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

将 Server2 的内容附加id_rsa.pubauthorized_keysServer1 的内容。

如果我手动执行它,但当我在期望脚本中执行它时,它会起作用:

#!/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.pubServer2 的 被附加到authorized_keysServer2 的 上。

正确的语法是什么?

答案1

看起来expect不是一个shell,所以它>>作为参数传递给ssh而不是解释它。

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

相关内容