Виправте параметри файлу ssh config для тунелю до третьої машини


20

Я намагаюся тунель до сервера через мостовий сервер. Поки що я міг змусити його правильно працювати з командної оболонки, використовуючи таку команду:

ssh -A -t bridge_userid@bridgemachine.com ssh -A remote_userid@remoteserver.com

Але я намагався зафіксувати це у своєму ~/.ssh/configфайлі, і у мене є проблеми. Я спробував:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -A -t bridge_userid@bridge_userid.com ssh -A remote_userid@%h

Але коли я це роблю, я отримую таке повідомлення про помилку, remoteserver.comі я не впевнений, що його викликає:

ksh: SSH-2.0-OpenSSH_6.8 ^ M: не знайдено

Я знаю, що коли я входжу remoteserver.com, моя оболонка є /usr/bin/ksh.

Я намагався додати аргументи шляху до команд ssh у файлі config, але це не мало значення.

Будь-які ідеї, що це може бути?


Це просто не те, як ProxyCommandпризначено використовувати. Зазвичай він використовується з netcat, де ssh трубопроводить свій вихід через нього, а netcat виконує роль тунелю до порту SSH віддаленого сервера . Вам потрібен ProxyCommand на кшталт, ssh -W %h:%p bridge_userid@bridgemachine.comякщо ви хочете використовувати цю функцію.
DanSut

На жаль, на моєму мостовому сервері на ньому не встановлено netcat, тому я намагаюся змусити це працювати іншим способом. Я зрозумів, що це може працювати з командного рядка, повинен бути спосіб ввести інформацію у конфігураційний файл.
Ерік Б.

У вашому використанні командного рядка, який ви працюєте, ви даєте ssh -A remote_userid@remoteserver.comкоманду для запуску на мостовій машині, config не дає вам можливості подавати команди за замовчуванням. Що ви намагаєтеся зробити worksв собі, але потім ssh намагається використовувати ваш ProxyCommandяк тунель і починає запускати протокол SSH вниз там, де на іншому кінці чекає оболонка, а не sshd, слухаючи протокол SSH.
DanSut

@dansut чудово працював. Дякую!
Ерік Б.

Відповіді:


25

Відповідь Джакуе є правильною, але оскільки OpenSSH 7.3, тепер ви можете використовувати, -J ProxyJumpщо простіше. Дивіться мої замітки:

OpenSSH 7.3або вище

Використовуйте ProxyJump. Як пояснено в посібнику:

-J [user @] хост [: порт]
Підключіться до цільового хоста, спочатку встановіть ssh-з'єднання з стрибковим хостом, а потім встановивши пересилання TCP до кінцевого пункту призначення звідти. Кілька стрибків-стрибків можуть бути задані розділеними знаками комами. Це ярлик для визначення директиви налаштування ProxyJump.

ProxyJump ~/.ssh/configприклад

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2_behind_server1
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyJump server1

Підключіться до

ssh server2_behind_server1 -v

Додати -vдля детального виводу

Приклад -Jкомандного рядка ProxyJump

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa

Підключіться до

ssh server2 -J server1 -v

Або використовувати -o

ssh server2 -o 'ProxyJump server1' -v

OpenSSH 5.4або вище

Використовуйте ProxyCommandз-W

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh server1 -W %h:%p

Підключіться до

ssh server2 -v

Або використовувати -o

ssh server2 -o 'ProxyCommand ssh server1 -W %h:%p' -v

OpenSSH нижче 5.4

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh server1 nc %h %p 2> /dev/null

Підключіться до:

ssh server2 -v

Або використовувати -o

ssh server2 -o 'ProxyCommand ssh server1 nc %h %p 2> /dev/null' -v

Джерела

-Jдодано у OpenSSH 7.3

  • ssh (1): Додайте параметр ProxyJump та відповідний прапор командного рядка -J, щоб дозволити спрощене опосередкування через один або декілька бастіонів SSH або "стрибати хости".

-Wдодано у OpenSSH 5.4

  • Додано 'режим netcat' до ssh (1): "ssh -W host: port ..." Це з'єднує stdio на клієнті з одним портом вперед на сервері. Це дозволяє, наприклад, використовувати ssh як ProxyCommand для маршрутизації з'єднань через проміжні сервери. bz # 1618

3

Вам не потрібно netcatна мосту. Як запропонував DanSut у коментарях, ви можете ssh -Wзамість цього використовувати параметр командного рядка, ця конфігурація повинна працювати для вас:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -AW %h:%p bridge_userid@bridge_userid.com

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