使用 expect 脚本自动化传输多个文件的 SCP

6

我看过很多关于这个问题的帖子,但可能我还没有看到正确的答案。

我正在使用一个expect脚本将多个文件从本地复制到远程服务器。我不想为无密码登录设置密钥,因为这样服务器就不能轻易地被销毁和重建,是的,我可以自动创建密钥,但我宁愿不这样做。所以我想能够使用*通配符,但每次使用*时它都会告诉我错误。我想使用*而不是完整的文件名,因为版本号会不断变化,我不想每次手动更改脚本。

/path/{Install.sh,programWithVerionAfter*\}: No such file or directory

Killed by signal 1. 

我希望这只是一个简单的修复或解决方法。我只想将这些文件通过scp传输,以便我可以通过单击按钮自动化安装过程。提前感谢您的任何帮助。
#!/usr/bin/expect -f

spawn scp /path/\{Install.sh,programWithVerionAfter*\} "root@IP:/tmp/.
expect {
   -re ".*es.*o.*" {
   exp_send "yes\r"
   exp_continue
  }
  -re ".*sword.*" {
    exp_send "Password\r"
  }
}
interact
2个回答

15

我认为在这种情况下,你会发现Tcl命令“glob”非常有用。 - This isn't my real name

0

您可以使用curl通过sftp将文件从本地主机复制到远程主机(这与使用scp进行复制在所有意图上都是相同的),并在命令中指定用户名和密码,如下所示:

curl -T /files/to/copy/*  -u username:password ftps://ftpshost.domain.tld/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接