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
Ответы:
К сожалению, не напрямую.
rsync
требуется чистая ссылка с оболочкой, которая позволит запустить удаленную копиюrsync
при запуске таким способом.Если у вас есть какой-либо способ запуска долгоживущих процессов прослушивания на хосте, вы можете попробовать запустить rsync, вручную прослушивающий соединения на непривилегированном порте, но большинство методов для этого потребует также надлежащего доступа к оболочке через SSH, и он полагается на устройства брандмауэра хостов, позволяющие подключаться к выбранному вами порту (и хост, на котором установлен rsync). Запуск rsync как общедоступной службы (а не косвенно через SSH или аналогичный) обычно не рекомендуется для непубличных данных.
Если на вашем хосте разрешено выполнение сценариев на PHP или аналогичном и оно не заблокировано,
exec
и пользовательские сценарии не могут редактировать дополнительные процессы , тогда вы можете попробовать запустить rsync в режиме прослушивания таким образом. Если ваш конец является подключаемым (вы используете SSH, доступный для внешнего мира), вы можете попробовать это в обратном порядке - запустите скрипт rsync на сервере, но вместо прослушивания входящих соединений сделайте так, чтобы он связался с вашей локальной службой и синхронизировал таким образом. Это по-прежнему основывается на фактической установке rsync на хосте, который не является заданным, или на то, что вы можете загрузить рабочую копию, но не влияет на безопасность запуска демона rsync публично адресуемым способом и общения с ним через незашифрованный канал.Бездействие, как описано выше, может противоречить политикам хостов, даже если оно вообще работает и может вас оттолкнуть. Вам лучше спросить, можно ли включить полную оболочку для этой учетной записи, либо либо отказаться от rsync для этого хоста, либо отказаться от этого хоста и переместиться в другое место, если они этого не сделают.
источник
Теоретически да. Вы можете смонтировать удаленную файловую систему на локальном компьютере, используя FUSE . Затем вы можете запустить локальную копию rsync между смонтированным каталогом и локальным каталогом. Я лично не пробовал это, но это должно работать в теории. Скорее всего, это будет намного менее эффективно, чем выполнение rsync по SSH, потому что для сравнения потребуется перенести хотя бы часть каждого файла.
источник
Альтернативой использованию rsync является использование lftp (который может подключаться к sftp) и использование команды mirror. Например, можно сделать
источник
немного поздно, но вот как я это делаю, используя sshfs
источник
Нет. Rsync работает, запуская rsync на другой стороне и связываясь с ним, что означает, что требуется некоторая форма доступа к оболочке.
источник
Альтернативой может быть запуск rsync в качестве демона и подключение к нему через туннель SSH.
источник
authorized_keys
которое разрешает определенный туннель и работает, напримерsleep 86400
. Тогда клиентская сторона может затемrsync
через туннель.Вариант, сочетающий лучшее из всего
Кажется, у него есть следующие преимущества, которых нет у других ответов:
rsync
демонаЯ еще не тестировал его, но я успешно использовал все эти функции, кроме
rrsync
.Как это сделать
ssh-keygen
(функция openSSH)~/.ssh/authorized_keys
(функция openSSH)~/.ssh/authorized_keys
(функция openSSH), используя в качестве команды скрипт,rrsync
распространяемый с rsync, что-то вродеcommand="$HOME/bin/rrsync -ro ~/backups/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-
Тогда вы можете rsync из клиента в обычном режиме.
Если вам нужно больше деталей
Ограничение доступа SSH к rsync | Гай Рутенберг
Один шаг за ссылку выше
Команда в конце этой страницы может быть сокращена. В
~/.ssh/config
создании строфа, как это:Host remote # can be host or ip or custom-label User user # login on remote host HostName optional-dns-resolvable-host-or-ip # if label used above IdentityFile ~/.ssh/id_remote_backup
тогда ваша команда rsync от клиента
становится
источник
rsync
мог работать, обходя аспект SFTP. Если вам предоставлен чужой SFTP-сервер, который вы не можете контролировать, этот ответ не решит проблему.