Rsync ssh文件通过expect传输,在bash中通过while循环执行时显示错误

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

我的程序需要自动文件传输到许多远程系统。因此尝试使用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 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密钥的权限。假设你有。然后,设置作业是沿着以下几点进行的:

  • 在本地计算机上生成公钥:
    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