Как вы используете идентификационный файл с rsync? - PullRequest
116 голосов
/ 03 апреля 2011

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

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

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

Но выдает ошибку:

Warning: Identity file ~/.ssh/1234-identity not accessible: No such file or directory.

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

Ответы [ 6 ]

80 голосов
/ 03 апреля 2011

Вы можете использовать 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.Вы можете использовать полный или относительный путь к ключу в одинарных кавычках.

70 голосов
/ 30 ноября 2013

Используйте либо $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

36 голосов
/ 05 апреля 2011

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

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

21 голосов
/ 22 ноября 2012

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

rsync -avz --rsh="ssh -p1234  -i ~/.ssh/1234-identity"  \
"/local/dir/" remoteUser@22.33.44.55:"/remote/dir/"
6 голосов
/ 03 апреля 2011

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

4 голосов
/ 11 мая 2016

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

rsync -rave "ssh -i /home/test/pkey_new.pem" /var/www/test/ ubuntu@231.210.24.48:/var/www/test
...