我想用来通过 sshexpect
运行一个简单的命令。cat /tmp/id_rsa.pub
在 shell 中,我可以运行这个问题,(手动输入密码)
ssh root@localhost 'cat /tmp/id_rsa.pub'
我想用expect
. 我的expect
剧本是
#!/usr/bin/expect
eval spawn ssh root@localhost 'cat /tmp/id_rsa.pub'
expect "password:"
send "123456"
expect eof
它抛出错误bash: cat /tmp/id_rsa.pub: no such file or directory
。我觉得很奇怪。可能的原因是什么?
编辑:经过一些测试,我发现这很常见,不仅在cat
. 如果 spawned 命令的参数带有空格(即使它在引号中),它也会有问题。例如,用cat /tmp/id_rsa.pub
空格替换其他命令,如
eval spawn ssh root@localhost 'which java'
它抱怨bash: which java: command not found
。但是,如果将其替换为pwd
,例如
eval spawn ssh root@localhost 'pwd'
它工作正常。