使用rsync和spawn通过SSH上传

时间:2014-01-06 03:02:54

标签: bash ssh expect rsync uploading

直到最近,我一直在使用以下bash脚本将任何已编辑的文件上传到我的服务器。

./ updatesite.sh

#!/usr/bin/expect -f
spawn rsync -av -e ssh "/(...)/webs" xusernamex@xdomainx.com:/home/webs
   expect "password:"
   send "xpasswordx\r"
   expect "*\r"
   expect "\r"

通常它运作良好。出于某种原因,几周前它突然停止了工作。这是它现在提供的输出:

xuserx@xdomainx.com's password: 
building file list ... done

如您所见,实际上没有上传文件。但是如果我将那个完全相同的命令直接粘贴到我的终端窗口而没有“spawn”,它的行为就会改变,并且像往常一样上传文件。

以下是一个例子:

Squid:~ John$ rsync -av -e ssh "/(...)/webs" xuserx@xdomainx.com:/home/xuserx
xuserx@xdomainx.com's password: 
building file list ... done
webs/somefile.txt

sent 878 bytes  received 42 bytes  204.44 bytes/sec
total size is 96409  speedup is 104.79
Squid:~ John$ 

你知道造成这种情况的原因吗?

1 个答案:

答案 0 :(得分:4)

#!/usr/bin/expect -f
# exp_internal 1    ;# uncomment to turn on expect debugging
set timeout -1
spawn rsync -av -e ssh "/(...)/webs" xusernamex@xdomainx.com:/home/webs
expect "password:"
send "xpasswordx\r"
expect eof

这可能是超时问题,因此请将超时设置为无限。由于除了密码之外你不必以任何方式与rsync交互,只需等待它完成(期望eof)。