Expect的"spawn"命令不支持shell通配符,如"spawn scp -r /home/user/dir1/* server:"



我正在尝试制作一个bash脚本来自动执行以下操作,这样我就不必每次都重新输入我的ssh密钥(稍后将解释原因):

scp -r /home/user/dir1/* cluster_server:

。e我只想将dir1的内容直接复制到cluster_server的主文件夹中。当我直接在命令行中输入它时,它就工作了。但是,我尝试像这样使用expect来自动化此操作:

#!/usr/bin/expect
spawn scp -r /home/user/dir1/* cluster_server:
expect "id_rsa':"
send "$PASSWORDr"
interact

我想到了一个问题。*不再工作了。我只能做

spawn scp -r /home/user/dir1/ cluster_server:

创建一个新目录。我知道这是一个微不足道的问题,但我想弄清楚为什么这不起作用。

而且,似乎在所有关于使用expect自动化ssh的问题中,每个人都回答你应该使用ssh密钥,这样你就不需要密码了。因此,在任何人建议之前,不幸的是,我不能这样做,因为我在尝试设置新的rsa id时弄乱了ssh密钥。我不得不禁用自动gnome密钥环,因为我得到了这个错误:如何删除ssh密钥?

Expect不理解shell的glob模式。试试这样:

spawn bash -c "scp -r /home/user/dir1/* cluster_server:"

您不需要gnome-keyring来设置新的ssh密钥。你可以按照这个手册从数字海洋。这样做真的非常非常简单,而不是与expect混淆。

最新更新