Я пытаюсь настроить SSH-соединение через прокси-сервер, чтобы
Host bridge-test
HostName TARGETHOST
ProxyCommand ssh -W BRIDGEHOST %h:%p
однако моя проблема в том, что я априори не знаю, что такое TARGETHOST
. Доступ к этой информации можно получить только выполнив команду на BRIDGEHOST
(которая является статической). Есть ли способ настроить SSH для получения TARGETHOST
в качестве переменной с прокси-сервера?
Это возможно с помощью встроенной магии
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
Как это работает?
cat host.txt
)/tmp/host.txt
true
, тогда исполнитель сопоставления всегда будет соответствовать/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
К сожалению, в Windows я сталкиваюсь со следующей проблемой при достижении строки exec: bash: cat host.txt: command not found
(или любой другой команды, которая должна получить TARGETHOST, если уж на то пошло) - есть ли способ решить эту проблему?
@JohnTitor Из man7 sshThe originalhost keyword matches against the hostname as it was specified on the command-line.
@JohnTitor Об окнах: я не ожидаю, что игрушка здесь сработает. Но если вы попытаетесь, вам следует использовать допустимые команды для cmd.exe или powershell (type C:\\temp\\host.txt
). Из WSL должно работать без изменений
Большое спасибо, @jeb. Это работает безупречно в Linux. Есть ли какая-либо документация по ключу
OrignalHost
, в том числе по сравнению сHost
?