Я хочу rsync-файлы между двумя удаленными серверами. Я попытался следовать следующему решению @roaima:https://unix.stackexchange.com/a/183516/137526, но мне нужно более деликатное решение по двум причинам:
- На одном из удаленных серверов порт для ssh не является портом по умолчанию, поэтому мне нужно указать порт с помощью опции -p.
- Я могу подключиться по ssh к обоим серверам, но мне пришлось использовать разные имена пользователей, поэтому это пришлось указать явно.
Кроме того, в приведенном решении не ясно, какой путь находится на исходном хосте, а какой на целевом, так как оба отображаются как /var/www.
Я пробовал разные варианты следующей команды, но безуспешно:
ssh -R localhost:50000:username1@dest_host:22 username2@source_host 'rsync -e "ssh -p 50000" -avzt --progress --partial /path/on/source/ localhost:/path/on/destination/'
решение1
То, что вы там делаете, по крайней мере 'сложно'. Насколько я понял, вы подключаетесь к одному серверу и говорите ему синхронизироваться с другим сервером.
Для простоты использования вы можете указать порт и пользователя для использования в локальной конфигурации ssh для конкретного хоста. Например, если вы добавите следующие строки в файл ~/.ssh/config (/home/username2/.ssh/config) на source_host:
machine dest_host
user username1
port 50000
Вы можете синхронизировать файлы с исходным хостом на dest_host с помощью rsync:
ssh username2@source_host 'rsync -e ssh /source/path/on/source_host dest_host:path_below_username1_home
Предположим, что sshd dest_host прослушивает порт 50000. Вы также можете рассмотреть опцию "-r" / "-u" rsync.
решение2
Элегантное решение, которое я нашел, — это использование scp
.
scp -3 -Cp [email protected]:/path/file*.txt [email protected]:/path/
Работает отлично. Обратите внимание на использование двух разных имен пользователей для двух хостов. Вы также можете использовать подстановочные знаки в имени файла, например *
.