Как использовать настройку `~ / .ssh / config` для каждого сервера с помощью` rsync`


14

Сейчас я использую rsync с -e 'ssh -p 10022'возможностью указать порт.

Я уже установил SSH ~/.ssh/config.

Host myvps
  HostName example.com
  User ironsand
  Port 10022

Могу ли я легко использовать этот конфиг из rsync? Или я могу создать ~/.rsyncи установить порт по умолчанию для указанного сервера?

Ответы:


22

Укажите в "myvps"качестве имени хоста.

rsync /var/bar myvps:/home/foo ...

Выполнение команды rsync из пользовательского каталога dir, где хранится конфигурация ssh, работает для меня, даже если оно поддерживает надежды узлов
Сталин Джино

8

Это не сработало для меня. У меня есть прыжковый хостинг в моем ~ / .ssh / config

Host 10.x.y.z
    User cloud-user
    HostName vm-pivot
    IdentityFile /path_to_vm_key

Host 21ct-dev1-*
    User cloud-user
    HostName %h.example.com
    ProxyCommand ssh 10.x.y.z -W %h:%p
    IdentityFile /path_to_vm_key


rsync -e "ssh" local_path vm-app01:/remote_path

ssh: не удалось разрешить имя хоста vm-app01 : указано имя узла или имя сервера или неизвестно rsync: соединение неожиданно закрыто (получено 0 байтов) [отправитель] ошибка rsync: необъяснимая ошибка (код 255) в / SourceCache / rsync / rsync- 42 / rsync / io.c (452) [отправитель = 2.6.9]

Тем не менее, это работает просто отлично

[kbroughton@kbroughton:project + (develop)] ssh vm-app01
Last login: Thu Apr 17 12:10:37 2014 from 10.a.b.c

Отредактируйте, я смог преодолеть разрешение имен, заставив rsync ssh загрузить файл конфигурации с -F sudo rsync -az -e "ssh -F /Users/kbroughton/.ssh/config"

Это проходит одну ошибку, но на другую. В доступе отказано (publickey, gssapi-keyex, gssapi-with-mic). ssh_exchange_identification: соединение закрыто удаленным хостом

Также попытался явно установить -i и user @ в соединении, но возникает та же ошибка.

РЕДАКТИРОВАТЬ

Еще одна точка данных. Если я использую плавающий ip pivot vm (хост перехода) вместо его имени, vm-pivot работает rsync. Но явный сброс всех моих ssh / config в -e "ssh" не работает. Подробности: локальный mac, обновлен до rsync 3.1.0, удаленный centos rsync 3.0.9.

[kbroughton@kbroughton:project + (develop)] sudo /usr/local/bin/rsync -az -e "ssh -F /Users/kbroughton/.ssh/config -i /Users/kbroughton/.ssh/identities/vm_key -W 10.x.y.z:22"  /var/data/sources/data.tar.gz user@vm-pivot:/home/user

Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
ssh_exchange_identification: Connection closed by remote host
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.0]

[kbroughton@kbroughton:project + (develop)] sudo /usr/local/bin/rsync -az -e "ssh -F /Users/kbroughton/.ssh/config -i /Users/kbroughton/.ssh/identities/vm_key -W 10.x.y.z:22"  /var/data/sources/data.tar.gz user@10.x.y.z:/home/user
protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(181) [sender=3.1.0]

Это работает

[kbroughton@kbroughton:project + (develop)] sudo /usr/local/bin/rsync -az -e "ssh -F /Users/kbroughton/.ssh/config -i /Users/kbroughton/.ssh/identities/vm_key"  /var/data/sources/data.tar.gz user@10.x.y.z:/home/user

Я понял, что в моем случае я не могу использовать ярлык, но можно использовать фактическое полное имя хоста
dashesy

1

@darKoram. Для случаев, когда вы вызываете ssh с нестандартным путем и попробуйте использовать ssh в ProxyCommand, это проблема, потому что нет наследования. У вас есть два варианта: напрямую предоставить один и тот же файл во внутренней команде или динамически взломать его. Вы можете посмотреть подробное описание в моем блоге об этом: http://hubbitus.info/wiki/Blog:Ssh_forwarding_with_same_config_file_hack

Кратко в вашей ситуации должна помочь конфигурация типа:

Host 21ct-dev1-*
  User cloud-user
  HostName %h.example.com
  ProxyCommand ssh $( egrep -z -A1 '^-F$' /proc/$PPID/cmdline ) 10.x.y.z -W %h:%p
  IdentityFile /path_to_vm_key

0

@darKoram. Запустите процесс SSH с помощью sudo:

sudo / usr / local / bin / rsync -az -e "sudo -u user ssh" /var/data/sources/data.tar.gz vm-app01: / home / user


-1

@darKoram

Какое полное DNS-имя "vm-app01"? Он должен быть публичным, так как вы утверждаете, что можете достичь его внутри ssh без rsync. Но вы ожидаете, что ssh перехватит ваш хост по шаблону "21ct-dev1- *". Я действительно не вижу, как это может работать каким-либо образом. Если вы попытаетесь создать шаблон имени хоста, он должен выглядеть примерно так:

Host *.21ct-dev1-domain.tld

Тогда вызов rsync должен выглядеть примерно так:

rsync -e "ssh" /local/path/ vm-app01.21ct-dev1-domain.tld:/remote/path/

Как разрешается "vm-app01"? Файл хостов, выигрывает, NIS, NSS? У вас есть псевдоним? Вы в домене? Это, безусловно, выглядит как «простая» проблема DNS.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.