2014-01-06 2 views
0

До недавнего времени я использовал следующий скрипт bash для загрузки любых отредактированных файлов на свой сервер.Загрузка через SSH с помощью rsync и spawn

./updatesite.sh

#!/usr/bin/expect -f 
spawn rsync -av -e ssh "/(...)/webs" [email protected]:/home/webs 
    expect "password:" 
    send "xpasswordx\r" 
    expect "*\r" 
    expect "\r" 

Обычно это работало отлично. По какой-то причине он внезапно прекратил работу несколько недель назад. Вот вывод, который он теперь предоставляет:

[email protected]'s password: 
building file list ... done 

Как вы можете видеть, файлы фактически не загружены. Но если я вставляю эту ту же самую команду непосредственно в мое окно терминала без «появления», его поведение изменяется и загружает файлы, как обычно.

Вот пример:

Squid:~ John$ rsync -av -e ssh "/(...)/webs" [email protected]:/home/xuserx 
[email protected]'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$ 

Вы знаете, что может быть причиной этого?

+0

Вы можете запустить SSH с возможностью отладки? ssh -d [email protected], какой результат? – BMW

+0

Позволяет ли ваша конфигурация разрешить sftp (что не связано с ftp) или scp вместо попытки сделать неинтерактивный ssh? – BradHards

+0

@BradHards Боюсь, я новичок в сети. Мой сервер размещен Dreamhost, если это помогает. Я, кажется, помню, что он поддерживал sftp. – Jonn

ответ

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

Это может быть проблема с таймаутом, поэтому установите тайм-аут на бесконечность. Поскольку вам не нужно взаимодействовать с rsync каким-либо образом, кроме пароля, просто подождите, пока он закончит (ожидайте eof).

+0

Работал как шарм. Спасибо за совет! – Jonn

Смежные вопросы