Expect 的 "spawn" 命令不支持 shell 通配符,如 "spawn scp -r /home/user/dir1/* server:"
Expect's "spawn" command does not support shell wildcards as in "spawn scp -r /home/user/dir1/* server:"
我正在尝试制作一个 bash 脚本来自动执行以下操作,这样我就不必每次都重新输入我的 ssh 密钥(稍后会解释原因):
scp -r /home/user/dir1/* cluster_server:
即我只想直接将 dir1 的内容复制到 cluster_server 的主文件夹中。当我直接在命令行中键入它时,这会起作用。但是,我尝试像这样用 expect 自动执行此操作:
#!/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?
您不需要 gnome-keyring 来设置新的 ssh 密钥。您可以关注来自 Digital Ocean 的 this manual。做一次真的比搞乱 expect 更容易。
Expect
不理解 shell 的 glob 模式。像这样尝试:
spawn bash -c "scp -r /home/user/dir1/* cluster_server:"
我正在尝试制作一个 bash 脚本来自动执行以下操作,这样我就不必每次都重新输入我的 ssh 密钥(稍后会解释原因):
scp -r /home/user/dir1/* cluster_server:
即我只想直接将 dir1 的内容复制到 cluster_server 的主文件夹中。当我直接在命令行中键入它时,这会起作用。但是,我尝试像这样用 expect 自动执行此操作:
#!/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?
您不需要 gnome-keyring 来设置新的 ssh 密钥。您可以关注来自 Digital Ocean 的 this manual。做一次真的比搞乱 expect 更容易。
Expect
不理解 shell 的 glob 模式。像这样尝试:
spawn bash -c "scp -r /home/user/dir1/* cluster_server:"