Як ви використовуєте файл посвідчення з rsync?


125

Як ви використовуєте файл посвідчення з rsync?

Це синтаксис, який я думаю, що я повинен використовувати за допомогою rsync, щоб використовувати ідентифікаційний файл для підключення:

rsync -avz -e 'ssh -p1234 -i ~ / .ssh / 1234-особистість' \
"/ local / dir /" remoteUser@22.33.44.55: "/ remote / dir /"

Але це дає мені помилку:

Попередження: Файл посвідчення ~ / .ssh / 1234-особистість не доступна: такого файлу чи каталогу немає.

Файл нормальний, дозволи встановлені правильно, він працює під час виконання ssh - тільки не з rsync - принаймні в моєму синтаксисі. Що я роблю неправильно? Чи намагається шукати файл ідентичності на віддаленій машині? Якщо так, то як я можу вказати, що я хочу використовувати ідентифікаційний файл на своїй локальній машині?

Відповіді:


86

Ви можете використовувати ssh-agentта ssh-addзавантажити ключ у пам'ять. sshавтоматично спробує ідентичності від ssh-агента, якщо він зможе їх знайти. Команди були б

eval $(ssh-agent) # Create agent and environment variables
ssh-add ~/.ssh/1234-identity

ssh-agentце демон користувача, який зберігає незашифровані ключі ssh в пам'яті. ssh знаходить це на основі змінних середовища, які ssh-агент видає під час запуску. Використовуючи evalдля оцінки цього результату, створюються змінні середовища. ssh-addце команда, яка управляє пам'яттю клавіш. Агент можна заблокувати за допомогою ssh-add. Термін служби ключа за замовчуванням може бути визначений при запуску ssh-агента та або вказаний для ключа, коли він доданий.

Ви також можете встановити файл ~ / .ssh / config для надання визначення порту та ключа. (Див. `Man ssh_config для отримання додаткових варіантів.)

host 22.33.44.55
    IdentityFile ~/.ssh/1234-identity
    Port 1234

Одноразове цитування команди ssh запобігає розширенню оболонки, яка потрібна для ~або $HOME. Ви можете використовувати повний або відносний шлях до ключа в одиничних лапках.


2
Подвійні котирування та використання $ HOME вирішили мою проблему. Чи можете ви детальніше розібратися, що роблять перші дві команди? Я вже був знайомий із налаштуванням конфігураційного файлу - єдина проблема, коли у мене є кілька облікових записів на одному сервері. Я не сподіваюся, що це дозволить мені вказати кілька ідентифікаційних файлів для одного хоста.
cwd

+1 Це вирішило мою проблему з drone.io :) Дякую.
Bhargav Nanekalva

Це дивовижно. FTR, ви можете також вказати ім'я користувача за замовчуванням для підключення як, наприклад, User ubuntuпід час налаштування для екземпляра EC2 Ubuntu :) Дякую!
DanielSmedegaardBuus

Якщо ви використовуєте оболонку стилю csh (наприклад, fish), тоді зробітьeval (ssh-agent -c)
Дейв

77

Використовуйте будь-який $HOME

rsync -avz -e "ssh -p1234  -i \"$HOME/.ssh/1234-identity\"" dir remoteUser@server:

або повний шлях до ключа:

rsync -avz -e "ssh -p1234  -i /home/username/.ssh/1234-identity" dir user@server:

Тестовано на rsync 3.0.9 на Ubuntu


3
Так, це добре працює, не потрібно використовувати ssh-агент або інші параметри конфігурації.
Лоран

2
+1: це глобальна проблема, як і ви не могли зробити "ls '~" "
Alex

$HOMEне працюватиме в простих лапках (без змінних розширень), тому вам потрібно використовувати подвійні лапки або абсолютний шлях.
анол

в стандартному Bash повинен працювати "$HOME"або $HOMEбез будь-якої різниці (також "${HOME}"можливо, якщо ви хочете зробити це складніше)
Tombart

Я змінив одиночні цитати на парні.
Стів Беннетт

36

Ви повинні вказати абсолютний шлях до файла вашого ідентифікаційного ключа. Це, мабуть, якась химерність у rsync. (адже це не може бути ідеальним)

Я зіткнувся з цим питанням всього кілька днів тому :-)


Ви можете використовувати ~, але ви не можете вбудовувати його в єдині лапки, тому що він не замінюється правильно на / home / username /, ви повинні використовувати подвійні лапки, щоб правильно працювати, див. Рішення @ilcavero
X Тянь

24

Це працює для мене

rsync -avz --rsh="ssh -p1234  -i ~/.ssh/1234-identity"  \
"/local/dir/" remoteUser@22.33.44.55:"/remote/dir/"

2
Мені чомусь довелося вказати повний шлях до файлу посвідчення, тобто /home/user/.ssh/1234-identity. Тоді це спрацювало. Можливо тому, що це тоді інша оболонка, як це запропоновано у відповіді Дархука.
оса

@osa ти мене там врятував! У мене виникла проблема з Drupal та rSYNC, і проблема полягала ... дивно.
Лі Вудман

6

Ви виконуєте команду в bash або sh? Це може змінити значення. Спробуйте замінити ~на $HOME. Спробуйте подвійно цитувати рядок для -eпараметра.


6

використовувати ключовий файл з rsync:

rsync -rave "ssh -i /home/test/pkey_new.pem" /var/www/test/ ubuntu@231.210.24.48:/var/www/test
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.