我正在尝试创建一个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?
答案 0 :(得分:1)
Expect
无法理解shell的 glob模式。试试这样:
spawn bash -c "scp -r /home/user/dir1/* cluster_server:"
答案 1 :(得分:0)
您不需要gnome-keyring来设置新的ssh密钥。您可以关注Digital Ocean的this manual。这样做真的非常非常容易,而不是一塌糊涂。