Как использовать файл идентификации с rsync?

125

Как использовать файл идентификации с rsync?

Это синтаксис, который, я думаю, мне следует использовать с rsync для использования файла идентификации для подключения:

rsync -avz -e 'ssh -p1234 -i ~ / .ssh / 1234-identity' \
"/ локальный / каталог /" remoteUser@22.33.44.55: "/ удаленный / каталог /"

Но это дает мне ошибку:

Предупреждение: файл идентификации ~ / .ssh / 1234-identity недоступен: нет такого файла или каталога.

Файл в порядке, разрешения установлены правильно, он работает при использовании ssh - только не с rsync - по крайней мере, в моем синтаксисе. Что я делаю не так? Он пытается найти идентификационный файл на удаленном компьютере? Если да, как мне указать, что я хочу использовать файл идентификации на моем локальном компьютере?

УХО
источник

Ответы:

86

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

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

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

Вы также можете настроить файл ~ / .ssh / config для предоставления определения порта и ключа. (Дополнительные параметры см. В `man ssh_config.)

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

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

BillThor
источник
2
Двойные кавычки и использование $ HOME решили мою проблему. Не могли бы вы подробнее рассказать, что делают первые две команды? Я уже был знаком с настройкой файла конфигурации - единственная проблема - когда у меня несколько учетных записей на одном сервере. Я не ожидаю, что это позволит мне указать несколько файлов идентификации для одного и того же хоста.
cwd 03
+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

Tombart
источник
3
Да, это работает нормально, нет необходимости использовать ssh-agent или другие параметры конфигурации.
Laurent
2
+1: это проблема с подстановкой, так же как вы не могли сделать «ls '~'»
Alex
$HOMEне будет работать внутри простых кавычек (без расширения переменных), поэтому вы должны использовать либо двойные кавычки, либо абсолютный путь.
anol
в стандартном Bash должно работать "$HOME"или $HOMEбез разницы (тоже "${HOME}"возможно, если вы хотите усложнить)
Tombart
Я заменил одинарные кавычки на двойные.
Стив Беннетт,
36

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

Я столкнулся с этой проблемой всего несколько дней назад :-)

Alpha01
источник
Вы можете использовать ~, но вы не можете вставлять его в одинарные кавычки, потому что тогда он не будет правильно заменен на / home / username /, вы должны использовать двойные кавычки, чтобы правильно работать, см. Решение @ilcavero
X Tian
24

Это работает для меня

rsync -avz --rsh="ssh -p1234  -i ~/.ssh/1234-identity"  \
"/local/dir/" remoteUser@22.33.44.55:"/remote/dir/"
ilcavero
источник
2
По какой - то причине я должен указать полный путь к файлу идентичность, то есть /home/user/.ssh/1234-identity. Тогда это сработало. Возможно, потому что это другая оболочка, как предлагается в ответе Дархуука.
osa
@osa ты спас меня там! У меня была проблема с Drupal и rSYNC, и проблема была в пути ... странном.
Ли Вудман,
6

Вы выполняете команду в bash или sh? Это может иметь значение. Попробуйте заменить ~на $HOME. Попробуйте заключить строку в двойные кавычки для -eпараметра.

Darhuuk
источник
6

использовать ключевой файл с rsync:

rsync -rave "ssh -i /home/test/pkey_new.pem" /var/www/test/ ubuntu@231.210.24.48:/var/www/test
Авинаш Раут
источник