Динамическое имя хоста при использовании SSH-прокси с ProxyCommand

Я пытаюсь настроить SSH-соединение через прокси-сервер, чтобы

Host bridge-test
  HostName TARGETHOST
  ProxyCommand ssh -W BRIDGEHOST %h:%p

однако моя проблема в том, что я априори не знаю, что такое TARGETHOST. Доступ к этой информации можно получить только выполнив команду на BRIDGEHOST (которая является статической). Есть ли способ настроить SSH для получения TARGETHOST в качестве переменной с прокси-сервера?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
81
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это возможно с помощью встроенной магии

Match originalhost bridge-test exec "ssh BRIDGEHOST 'cat host.txt' > /tmp/host.txt; true"
  hostname dummy
  ProxyCommand ssh BRIDGEHOST -W $(cat /tmp/host.txt):%p

Как это работает?

  1. Выражение match exec используется только для подключения к BRIDGEHOST и динамического получения имени хоста (в качестве примера я использовал простой cat host.txt)
  2. Сохраните имя хоста в локальный файл /tmp/host.txt
  3. Завершите команду сопоставления с помощью true, тогда исполнитель сопоставления всегда будет соответствовать
  4. Используйте имя хоста из /tmp/host.txt в ProxyCommand.

Но очевидный вариант не работает

Я ожидаю, что это можно упростить до

HOST bridge-test
  hostname dummy
  ProxyCommand ssh BRIDGEHOST -W $(ssh BRIDGEHOST 'cat host.txt'):%p

Но этот вариант терпит неудачу:

Неверная длина пакета 1231976033.
ssh_dispatch_run_fatal: подключение к НЕИЗВЕСТНОМУ порту 65535: неверный код аутентификации сообщения

Я тестировал много упрощенных вариантов, но как только я где-то вызываю ssh, это приводит к ошибке.
Протестировано с:

$ ssh -V
OpenSSH_8.9p1 Ubuntu-3ubuntu0.6, OpenSSL 3.0.2 15 Mar 2022

Большое спасибо, @jeb. Это работает безупречно в Linux. Есть ли какая-либо документация по ключу OrignalHost, в том числе по сравнению с Host?

John Titor 18.05.2024 09:16

К сожалению, в Windows я сталкиваюсь со следующей проблемой при достижении строки exec: bash: cat host.txt: command not found (или любой другой команды, которая должна получить TARGETHOST, если уж на то пошло) - есть ли способ решить эту проблему?

John Titor 18.05.2024 09:22

@JohnTitor Из man7 sshThe originalhost keyword matches against the hostname as it was specified on the command-line.

jeb 18.05.2024 10:35

@JohnTitor Об окнах: я не ожидаю, что игрушка здесь сработает. Но если вы попытаетесь, вам следует использовать допустимые команды для cmd.exe или powershell (type C:\\temp\\host.txt). Из WSL должно работать без изменений

jeb 18.05.2024 10:42

Другие вопросы по теме