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


14

Зараз я використовую rsync з -e 'ssh -p 10022'опцією, щоб вказати порт.

У мене вже встановлено ssh ~/.ssh/config.

Host myvps
  HostName example.com
  User ironsand
  Port 10022

Чи можу я легко використовувати цю конфігурацію від rsync? Чи можна створити ~/.rsyncі встановити порт за замовчуванням для вказаного сервера?

Відповіді:



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 @ у з'єднанні, але трапляється така ж помилка.

EDIT

Ще один пункт даних. Якщо я використовую плаваючий ip зведеного vm (стрибаючого хоста) замість його імені vm-pivot rsync працює. Але явно скидання всіх моїх ssh / config у -e "ssh" не працює. Докладніше: локальний mac, оновлений до rsync 3.1.0, віддалений центр 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"? Файл хостів, win, nis, nss? У вас є псевдонім? Ви в межах домену? Звичайно, це виглядає як "проста" проблема DNS.

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