Rsync ssh文件通过expect传输,在bash中通过while循环执行时显示错误
我的程序需要自动文件传输到许多远程系统。因此尝试使用expect for RSYNC SSH文件传输。当我通过提供必要输入的终端或通过包含传递值的简单bash脚本运行.ex文件时,它工作得很好 但我想在从数据库检查后调用.ex文件,通过RSYNC将文件传输到100多台机器,所以我需要通过一些循环运行脚本,动态填充变量 我的.ex文件:Rsync ssh文件通过expect传输,在bash中通过while循环执行时显示错误,bash,ubuntu,ssh,rsync,expect,Bash,Ubuntu,Ssh,Rsync,Expect,我的程序需要自动文件传输到许多远程系统。因此尝试使用expect for RSYNC SSH文件传输。当我通过提供必要输入的终端或通过包含传递值的简单bash脚本运行.ex文件时,它工作得很好 但我想在从数据库检查后调用.ex文件,通过RSYNC将文件传输到100多台机器,所以我需要通过一些循环运行脚本,动态填充变量 我的.ex文件: #!/usr/bin/expect -f set pass [lindex $argv 0] set server [lindex $argv 1] set
#!/usr/bin/expect -f
set pass [lindex $argv 0]
set server [lindex $argv 1]
set name [lindex $argv 2]
set addr [lindex $argv 3]
set timeout -1
spawn rsync -e "ssh -q -o StrictHostKeyChecking=no" ${addr} ${name}@${server}:/home/deba/
expect {
-re ".*Are.*.*yes.*no.*" {
send "yes\n"
exp_continue
#look for the password prompt
}
"*?assword:*" {
send ${pass}
send "\n"
interact
#The expect command will now return
}
}
显示错误的我的Bash脚本:
#!/bin/bash
cat /home/deba/content_sync/test/result_remote/sync_Dest_List.txt | while read line2
do
java -cp .:mysql-connector-java-5.1.24-bin.jar Remote_sync_pw_ip_reciever $line2
cat /home/deba/content_sync/test/result_remote/sync_Dest_List.txt | while read line
# this folder contains the arguments for password and server IP separated by space
do
IFS=" " read var1 var2 <<< "$line"
./rsync1.ex $var1 $var2 $line2 /home/deba/cron.sh
done
done
但是bash代码中的一个简单调用没有显示任何错误:
#!/bin/bash
./rsync1.ex rups78 10.129.30.44 deba /home/deba/cron.sh
请建议解决方案,使整个文件传输过程完全自动化,而无需任何人为干扰
提前谢谢 要想弄清楚您想要做什么有点困难,但一个简单的建议是对无密码登录使用ssh密钥。仅此一项就有两个好处:
- 不需要明文存储密码
- 从scipt进行更简单的登录过程,您很可能根本不需要expect部分
ssh keygen-t dsa
~/.ssh/id_dsa.pub
文件复制到远程计算机上的~/.ssh/authorized_密钥
在步骤2中。您必须将多个文件的内容放在一个文件中,只需将它们附加在一起。将
set-x
放在/rsync1.ex…
行的前面,然后将set-x
放在后面。这将以直观明确的格式显示命令是如何执行的。查看它与您的简单调用invocation.thnks的比较,以获得您的回复。。令人困惑的是,我不知道接收者是否安装了ssh,在我的例子中,我正在开发一个web应用程序,用户可以通过rsync和cron定期注册和获取更新
#!/bin/bash
./rsync1.ex rups78 10.129.30.44 deba /home/deba/cron.sh