Rsync поверх SSH, прекрасно работает каждый раз.
Однако попытка выполнить rsync для хоста, который разрешает вход только по sftp, но не через ssh, приводит к следующей ошибке:
rsync -av / source ssh user @ remotehost: / target /
несоответствие версии протокола - чиста ли ваша оболочка? (см. справочную страницу rsync для объяснения) Ошибка rsync: несовместимость протокола (код 2) в compat.c (171) [sender = 3.0.6]
Вот соответствующий раздел со страницы руководства rsync:
Это сообщение обычно вызывается вашими сценариями запуска или удаленной оболочкой, производящими нежелательный мусор в потоке, который rsync использует для своего транспорта. Способ диагностики этой проблемы - запустить вашу удаленную оболочку следующим образом:
ssh remotehost /bin/true > out.dat
затем посмотрите на out.dat. Если все работает правильно, то out.dat должен быть файлом нулевой длины. Если вы получили вышеуказанную ошибку от rsync, то вы, вероятно, обнаружите, что out.dat содержит текст или данные. Посмотрите на содержимое и постарайтесь понять, что его производит. Наиболее распространенная причина - неправильно настроенные сценарии запуска оболочки (такие как .cshrc или .profile), которые содержат выходные операторы для неинтерактивных входов в систему.
Попытка сделать это в моей системе произвела следующее в out.dat:
ssh-dummy-shell: команда не разрешена.
Как я и думал, хост не разрешает вход в систему через ssh.
Следующая ссылка показывает, что можно выполнить эту задачу, используя fuse с sshfs - однако это чрезвычайно медленно и не подходит для производственного использования.
Есть ли шанс заставить работать rsync sftp?
csync /home/csync sftp://csync@krikkit.galaxy.site:2222/home/csync
см. Этот ответ .
lftp -e "mirror -eRv /local/dir/ /remote/dir; quit;" sftp://user@server:port