Как я могу установить rsync между двумя хостами без ввода пароля?
4 ответа
Ниже статья из The Geek Stuff:
1. Тест rsync через ssh (с паролем):
Выполните rsync, чтобы убедиться, что он запрашивает пароль для вашей учетной записи на удаленном сервере, и успешно копирует файлы на удаленный сервер.
Следующий пример синхронизирует локальную папку
/home/test
с удаленной папкой/backup/test
(на сервере192.168.200.10
).Это должно спросить вас пароль вашей учетной записи на удаленном сервере.
rsync -avz -e ssh /home/test/ user@192.168.200.10:/backup/test/
2. ssh-keygen генерирует ключи.
Теперь настройте
ssh
так, чтобы он не запрашивал пароль при выполнении ssh. Используйтеssh-keygen
на локальном сервере для генерации открытых и закрытых ключей.$ ssh-keygen
Введите кодовую фразу (пусто для парольной фразы):
Введите тот же пароль еще раз: Примечание. Когда вам будет предложено ввести пароль, просто нажмите клавишу ввода и не вводите здесь пароль.
3. ssh-copy-id копирует открытый ключ на удаленный хост
Используйте
ssh-copy-id
, чтобы скопировать открытый ключ на удаленный хост.ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.200.10
Примечание. Приведенное выше запросит пароль для вашей учетной записи на удаленном хосте и автоматически скопирует открытый ключ в соответствующее место. Если ssh-copy-id не работает для вас, используйте метод, который мы обсуждали ранее, чтобы настроить ssh пароль без логина.
4. Выполните rsync через ssh без пароля
Теперь вы должны иметь возможность подключиться к удаленному хосту без ввода пароля.
ssh 192.168.200.10
Выполните rsync еще раз, на этот раз он не должен просить вас вводить пароль.
rsync -avz -e ssh /home/test/ user@192.168.200.10:/backup/test/
Генерировать открытый ключ в ServerA
$ ssh-keygen
$ Enter passphrase (empty for no passphrase):
$ Enter same passphrase again:
Открытый ключ будет создан и сохранен в
~/.ssh/id_rsa.pub
Скопируйте открытый ключ на удаленный хост
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.1.100
Или же
- Откройте id_rsa.pub, скопируйте содержимое
- Войдите в систему ServerB, используя того же пользователя в команде rsync
- В ServerB добавьте содержимое к
~/.ssh/authorized_keys
. Создайте файл, если он не существует. Убедитесь, что режим файла 700.
Все эти предложения по rsync не работают с последней версией в августе 2017 года на Ubuntu 16.04 LTS. Ни один из них не работает.
Кроме того, все они разделяют недостаток необходимости запуска демона rsync на файловом сервере.
Этот ответ работает с универсальным сетевым хранилищем Linux
ЗДЕСЬ ШАГИ:
1) ИСПОЛЬЗУЙТЕ rsync, как показано ниже.
(в каталог в /mnt или /media, который вы создали, или на устройстве, которое вы монтируете. Неважно, какой) 2) ПЕРЕДАЧА файлов с помощью scp, как показано ниже. FileZilla тоже будет работать.
Все это (кроме FileZilla) может работать в cron без пароля.
Эта настройка работает очень хорошо. Единственный раз, когда вам нужен пароль, это когда вы устанавливаете начальный ssh-copy-id для настройки входа без пароля RSA. Затем вы запрограммируете его в FileZilla один раз. После этого день ото дня никаких запросов на ввод пароля не происходит. Это просто. И самое приятное, что вы можете использовать все преимущества программы rsync.
Этот ответ объясняет, как использовать сам rsync без пароля.
Кроме того, нет необходимости устанавливать еще один демон (rsync) в любой системе.
Если вы еще этого не сделали, сделайте это:
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rse.pub NASserver
и проверить это с этим:
ssh NASserver
и может быть что-то вроде этого:
scp myfile myusername@NASserver:Documents
У меня есть второй жесткий диск, поэтому я использую rsync для копирования загрузочного диска в подкаталог на sdb1 (смонтированный в /mnt и исключенный из rsync).
Если у вас нет физического жесткого диска и достаточно свободного места, вы просто создаете подкаталог в /mnt (или /media) и используете его.
Пока каталог исключен, не имеет значения, находится он на отдельном диске или нет.
Вот скрипт резервного копирования:
cls
echo "EMPTYING TRASH"
rm ~/.local.share/Trash/*
echo "====================================================================="
echo " BEGINNING rsync from root to /mnt/full/sysbkp"
echo "====================================================================="
time sudo rsync -aAXv / --delete --ignore-errors --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /mnt/full/mysystem
ПОСЛЕ rsync используйте скрипт:
Я всегда создаю новый каталог на целевом сервере NASserver:/mnt/fullsys/mysystem, чтобы передавались только соответствующие файлы.
ssh -e"mv /mnt/fullsys/mysystem mysystem.bak" myusername@NASserver
ssh -e"mkdir /mnt/fullsys/mysystem" myusername@NASserver
scp -r /mnt/full/mysystem myusername@NASserver:/mnt/fullsys/mysystem
Вуаля! Это займет некоторое время, но потом это будет сделано.
Оба скрипта могут нормально работать в cron.
Альтернативой является использование FileZilla для отправки на сервер NAS вручную.
Поскольку могут быть удаления, я всегда
make a new directory and enter it
через FileZilla на целевом жестком диске емкостью 1 ТБ, поэтому передаются только соответствующие файлы.
Только после завершения передачи я удаляю старую версию.
Вуаля. Успех.
лучше пометить пользователя по адресу
ssh-copy-id -i ~/.ssh/id_rsa.pub <user_in_server>@192.168.1.100