Команда ssh proxyjump для файла конфигурации

Команда ssh proxyjump для файла конфигурации

Я использую команду ssh для входа на удаленный узел с использованием промежуточного узла через proxyjump. Удаленный и промежуточный узлы — это серверы Linux, а мой клиент — Macbook. Эта команда работает и выглядит так:

ssh -i .ssh/id_file -J user1@jump_node -A -D remote_port user2@remote_node

где я заменяю jump_node и remote_node на имена хостов промежуточных и удаленных узлов, а remote_port на порт sshd на remote_node.

Мой первый и главный вопрос: как сделать эту команду разделом конфигурации?которые я могу поместить в свой файл .ssh/config? Я посмотрел на страницу руководства ssh и не смог получить соответствующие параметры конфигурации для -Dи -Aфлаги (я полагаю, ForwardAgent yesдля -A?). Может ли кто-нибудь объяснить эти флаги и как сделать правильный раздел конфигурации из этой команды?


Мой другой вопрос менее важен, но поможет мне понять, что здесь происходит.Второй вопрос касается ошибки, которую я получаю, когда даю немного другую команду.

В большинстве документов, которые я прочитал в Интернете, предлагается использовать такую ​​команду:

ssh -i .ssh/id_file -J user1@jump_node user2@remote_node:remote_port

но когда я пробую эту команду (как с флагом, так и без него -A), я получаю следующую ошибку:

channel 0: open failed: connect failed: Name or service not known
stdio forwarding failed
kex_exchange_identification: Connection closed by remote host
Connection closed by UNKNOWN port 65535

Я не могу понять, что означает эта ошибка, и есть ли какие-то подсказки, которые я мог бы использовать?

решение1

Видетьman 5 ssh_config:

ForwardAgent yes
IdentityFile .ssh/id_file

Host jump_node
    User user1

Host remote_node
   ProxyJump jump_node
   User user2

и просто беги ssh remote_node.

Вы даже можете построить цепочку таким образом, если также укажете (еще один) ProxyJumpдля jump_nodetoo.


Вторая проблема заключается в том, что ssh user2@remote_node:remote_portэто неправильный синтаксис. В сообщении об ошибке указано Name or service not known, поскольку он пытался (и не смог) разрешиться remote_node:remote_portкак имя хоста (да, со встроенным двоеточием), а не remote_nodeтак, как вы могли бы ожидать. Попробуйте запустить то же самое без -J, сообщение об ошибке будет немного более понятным.

Я бы интерпретировал это как попытку указать порт, на котором SSH-сервер прослушивает удаленный узел; для этого используйте -pпараметр командной строки или Portпараметр записи хоста в файле конфигурации.

Также это не имеет ничего общего с -Dпереключателем командной строки. И его аргумент не является "удалённым портом". Скорее, этот переключатель делает совершенно другое, а именно, он заставляет SSH-клиентаслушатьна указанном портуна локальной машинеи принимать соединения SOCKS, а удаленный будет использоваться как выходной узел. Вы можете, например, настроить его в локальном браузере, так что он будет выходить в интернет через туннель SSH, и третьи лица (веб-серверы) будут видеть ваши соединения как идущие с IP удаленного хоста; никто не увидит ваш "реальный" IP, кроме сервера SSH (который, однако, увидит адрес сервера перехода в этом случае). Чтобы установитьэтотв конфигурации вы используете DynamicForwardопцию в файле конфигурации.

Связанный контент