Дозвольте ssh вирішувати імена хостів з конфігурації під час використання ProxyCommand та режиму netcat


16

Я намагаюся встановити деякі універсальні параметри для підстрибування ssh-з'єднань. Ось мій ~/.ssh/configфайл, скорочений:

Host *%via
  ProxyCommand ssh gateway -W $(echo %h | cut -d%% -f1) %p

Host gateway
  HostName gateway.example.com
  User username
  ForwardAgent yes
  IdentityFile keypathg

Host target
  User username
  HostName target.example.com
  IdentityFile keypatht

Коли я використовую *%viaвикористовуючи Hostпсевдоніми, я отримую:

% ssh -vvv target%via
OpenSSH_5.9p1, OpenSSL 0.9.8y 5 Feb 2013
debug1: Reading configuration data /Users/myuser/.ssh/config
debug1: /Users/myuser/.ssh/config line 5: Applying options for *
debug1: /Users/myuser/.ssh/config line 12: Applying options for *%via
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: auto-mux: Trying existing master
debug1: Control socket "/Users/myuser/.ssh/tmp/target%via_22_myuser" does not exist
debug2: ssh_connect: needpriv 0
debug1: Executing proxy command: exec ssh -A gateway -W $(echo target%via | cut -d% -f1):22
debug1: permanently_drop_suid: 501
debug1: identity file /Users/myuser/.ssh/id_rsa type -1
debug1: identity file /Users/myuser/.ssh/id_rsa-cert type -1
debug1: identity file /Users/myuser/.ssh/id_dsa type -1
debug1: identity file /Users/myuser/.ssh/id_dsa-cert type -1
ssh_exchange_identification: Connection closed by remote host

Однак, якщо я використовую

% ssh target.example.com%via

Я потрапив на цільовий сервер, але як неправильний користувач і без автентифікації pubkey.

Я думаю , що в даний момент моє питання полягає в тому, чи цей метод підстрибування при використанні ForwardAgentпроходить через моє ssh config / середовище ціле, або просто клавіші. Якщо лише ключі, чи можна колись використати колишній?

Моя версія ssh - 5.9v1, шлюз - 5.9v1, а цільовий - 5.3p1. Я вважаю, що це -Wбуло введено в 5.4, але це не має значення для фінального поля в черзі? використання старшої школи, ncсхоже, не відрізняється.

Я переконався, що я можу вручну надсилати скриньку до кожного поля в рядку. Це вказує на те, що інформація про псевдонім імені хоста не передається, як і коли на шлюзі, я не можу, ssh targetале можу ssh target.example.com. Це працює з автентично. шлюз і ціль між іншим мають однакове ім'я користувача, саме тому це працює, якщо не конфігурується жодна конфігурація.

Якщо ForwardAgentабо подібний конфігуратор не може висунути цю інформацію, який найбезпечніший спосіб обійти її, зберігаючи .ssh / config на шлюзі з цією інформацією?

Відповіді:


14

Нічого, дякую, що поставили це запитання. Мені здається, що рідко можна зустріти когось, хто повністю експлуатує SSH, і це питання потрапляє в пару областей.

Це не ProxyCommandпроблема. ProxyCommandПросто вказує локальний клієнт SSH , щоб зробити що - то в процесі підготовки , перш ніж намагатися поговорити з віддаленим клієнтом. Так, у нашому випадку ми розмовляємо з іншим сеансом ssh, але цей сеанс -Wпросто бере наш вклад і пересилає його на іншу машину. Ви можете подумати, що підготовчий ssh ​​сеанс повністю незалежний. Неминуча аналогія автомобіля: Ваш автомобіль - це той самий автомобіль, незалежно від того, чи потрібно було їздити на поромі, щоб дістатися з точки А до точки В.

Це не ForwardAgentпроблема. ForwardAgentмає місцевий клієнт надавати засоби, які надають локальні ключі в оточенні віддаленого сеансу. Ви ще не пройшли через встановлення віддаленого сеансу.

Це .ssh/configпитання формату. Зверніть увагу на другий і третій рядки налагодження1. Вони перераховують те, які хост-строфи застосовуються до ваших .ssh/config. Ви зазначаєте, що це $ ssh target.example.com%viaпрацює, але як неправильне ім’я користувача та ключ. Ну, строфа для Host targetне читається (що б забезпечило правильне ім’я користувача та ключ файлів). Які строфи використовуються? *і *%via.

Як змусити ці варіанти пройти? Що ж, досить цікаво, підстановка відповідає 0 рядкам довжини. Host target*буде відповідати target, target%via, target.example.comі target.example.com%via.

І тому ви ставите питання, чи допоможе встановлення .ssh/configна gatewayмашині. Ні, не буде. Його ніколи не читали б. Все відбувається з нашої локальної машини.

Все, що я пояснив, лише відповіді, чому $ ssh target.example.com%viaце не працює.

Ви віддаєте перевагу $ ssh target%via. Правильно, зручніше. Коротка форма не вдається, оскільки як ім'я хоста targetне знайдено; це не вирішує. Чому не йде ssh spewing ssh: Could not resolve hostname target: Name or service not known:? Тому що ProxyCommandце вже вдало встановлено. Елементи ssh-з'єднання були вбудовані, але збій імені хоста відбувається там, де його не очікують, і тому він бомбардується більш загальним повідомленням. Я б подав звіт про помилку щодо цього, щоб допомогти визначити, де інформацію про налагодження можна було б покращити.

Остаточний коментар:

Мені подобається Host *%viaсинтаксис. Це чисто, але гнучко. Я раніше бачив, Host *+*і він використовує як першу, так і останню частину, %h(ost)щоб визначити, куди йти. Але потрібно трохи більше зусиль, щоб змусити це зробити розум. посилання: http://wiki.gentoo.org/wiki/SSH_jump_host

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