Вкажіть файл ідентифікації (id_rsa) за допомогою rsync


196

Мені потрібно робити періодичні резервні копії каталогу на віддаленому сервері, який є віртуальною машиною, розміщеною дослідницькою організацією. Вони вимагають, щоб доступ до віртуальних машин здійснювався через ключі ssh, що добре, за винятком того, що я не можу зрозуміти, як вказати rsync на ключ ssh для цього сервера.

Rsync не має жодних проблем, якщо файл ключа є ~/.ssh/id_rsa, але коли це щось інше, я отримую Permission denied (publickey).

За допомогою ssh я можу вказати файл посвідчення -i, але, схоже, у rsync такої опції немає.

Я також намагався тимчасово перемістити ключ на локальній машині ~/.ssh/id_rsa, але це також не працює.

тл; д-р

Чи можете ви вказати файл посвідчення за допомогою rsync?


1
Корисно також для того sudo rsync, що чомусь не використовує власні ssh-ключі.
ійосеф

1
@ijoseph Точно я використовую rsync -aAP "sudo -u user ssh" user@server:dir local_dirпід час синхронізації із cron-скриптів, які виконуються як root
Martin Pecka

Відповіді:


341

Ви можете вказати точну команду ssh за допомогою параметра '-e':

rsync -Pav -e "ssh -i $HOME/.ssh/somekey" username@hostname:/from/dir/ /to/dir/

Багато користувачів ssh незнайомі зі своїм файлом ~ / .ssh / config. Ви можете вказати параметри за замовчуванням для хоста через файл конфігурації.

Host hostname
    User username
    IdentityFile ~/.ssh/somekey

Зрештою, найкраще вивчити файл ~ / .ssh / config.


Не допомагає мені мати IdentityFile в ssh_config. Я можу "ssh web1" без проблем, але при використанні rsync для web1: ... це не працює з "Дозволом відмовлено (publickey)".
Zitrax

1
Спробуйте підняти багатослівність транспорту ssh: rsync -e 'ssh -vv' web1: / etc / issue / tmp / issue
Dan Garthwaite

1
Ага. Якщо ви автоматизуєте це, і не зможете надати пароль, вам знадобиться додатковий пароль, що не має паролів, налаштований на обох кінцях. Якщо ви хочете, щоб rsync працював без пароля в інтерактивному сеансі, вам потрібно буде використовувати ssh-агент.
Dan Garthwaite

16
Duuuuuuude! ~/.ssh/configфайл - ви відкрили новий всесвіт для мене!
деманяк

2
~ / .ssh / config врятував мене день, велике спасибі.
smishra

17

Це можна зробити за допомогою конфігурації користувача SSH, див .: http://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/ в основному редагувати ~ / .ssh / config:

$ nano ~/.ssh/config
#Add Hosts below 
Host server1
HostName examplehost.com
User username
Port 22
IdentityFile /path/to/key

$ rsync -e ssh /home/user/directory user@remote.host.net:home/user/directory/

Це має працювати для будь-якої програми, що використовує SSH, rsync,



4

FYI:

1) Відкритий ключ завжди знаходиться в домашній директорії користувача, який увійшов на віддалений сервер, тобто якщо ви входите як "резервна копія", він знаходиться за адресою /home/backup/.ssh/authorized_keys. Ідентифікатор користувача під час входу визначає відкритий ключ, який використовується в пункті призначення.

Ви можете вибрати ідентифікатор користувача під час з'єднання двома різними способами:

ssh user_id@destination.server
or
ssh -l user_id  destination_server     (<-- that is lower case "L")

З іншого боку, у вашому кінці приватний ключ знаходиться аналогічно в homedir користувача, якщо ви не перекриєте його, як описано у відповіді Дена.

2) Для резервного копіювання може бути бажаним створити обмежений ключ, який обмежений для запуску лише однієї команди типу "rsync". Існує хороший опис того, що стосується резервного копіювання "rsnapshot", яке дозволяє віддалено створювати резервне копіювання всього сервера, використовуючи непривілейований обліковий запис користувача та "sudo":

"rsnapshot" howto

Rsnapshot може легко створити резервну копію купу віддалених або локальних серверів, що робить його зручним плановим та централізованим резервним сервером.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.