Кажется, существует ограничение на размер файла для передачи sftp из командной строки, если я пытаюсь загрузить файл размером 20 МБ, он останавливается на 20%, когда передаваемые данные превышают 4 МБ:
/myfile.xml 22% 4480KB 410.4KB/s 00:38 ETA
Есть ли где-то предел и как его изменить? Я использую скриптовое соединение sftp с ожиданием. Скачивание файла через Файловый менеджер Nautilus или sftp из консоли без сценария оболочки и ожидать программа обе вроде работают. Сценарий выглядит следующим образом:
#!/usr/bin/expect
# usage: ./sftp_import.sh username host password filepath localpath
set username [lindex $argv 0]
set host [lindex $argv 1]
set password [lindex $argv 2]
set filepath [lindex $argv 3]
set localpath [lindex $argv 4]
spawn sftp $username@$host
expect "password:"
send "$password\r";
expect "sftp>"
send "get $filepath $localpath\r"
expect "sftp>"
send "bye \r";
exit 0
По умолчанию ограничений нет (насколько мне известно).
Я предполагаю, что вы получаете потерю пакетов и тайм-аут. Попробуйте добавить -D.
-D sftp_server_path Connect directly to a local sftp server (rather than via ssh(1)). This option may be useful in debugging the client and server.
Источник: http://www.cl.cam.ac.uk/cgi-bin/manpage?1+sftp
Я бы, наверное, скопировал с помощью rsync, rsync -avrz --ignore-existing /folder/folder/folder username@whatever.com:/folder/folder/folder
Кажется, что добавление тайм-аута решает проблему. По умолчанию время ожидания ожидания равно 10 секунд, что означает, что при скорости 400 КБ / с тайм-аут срабатывает, если достигается 4000 КБ = 4 МБ
set timeout 300