Я использую команду 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_node
too.
Вторая проблема заключается в том, что 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
опцию в файле конфигурации.