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

时间:2016-10-28 17:54:11

标签: linux ssh expect scp

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

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

即我只想将dir1 的内容直接复制到cluster_server的主文件夹中。当我直接在命令行中输入它时,这可以工作。但是,我试着像这样预期自动化:

#!/usr/bin/expect

spawn scp -r /home/user/dir1/* cluster_server:
expect "id_rsa':"
send "$PASSWORD\r"
interact

我想出了一个问题。 *不再有效。我只能这样做

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

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

此外,似乎在使用expect来自动化ssh内容的所有问题中,每个人都回答你应该使用ssh密钥,这样你就不需要密码了。所以在任何人建议之前,不幸的是我不能这样做,因为当我试图建立一个新的rsa id时我弄乱了我的ssh键。我不得不禁用自动gnome-keyring,因为我收到了这个错误:How to remove a ssh key?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您不需要gnome-keyring来设置新的ssh密钥。您可以关注Digital Ocean的this manual。这样做真的非常非常容易,而不是一塌糊涂。