Существует хост перехода, называемый через ProxyCommand, для доступа к некоторым серверам. В файле .ssh/config есть определение Host для каждого сервера и команда для прыжкового хоста (с %r и %h из конфигурации хоста):

Host myserver
    Hostname myserver.mydomain.net
    User technic
    port 22
    ProxyCommand ssh -x -p 22 jumpuser@jumphost ssh -6 -p 22 -x %r@%h "nc localhost %p"

Получив доступ к Jumphost и затем выполнив команду ssh <host> получите приглашение для подтверждения соединения. Тогда следующие соединения работают нормально даже через Jumphost.

Если я вместо этого пытаюсь подключиться напрямую через Jumphost, я не получаю запрос на подтверждение подлинности, и я просто получаю

key_load_public: Не удалось проверить файл или каталог.

Я использую следующие версии: OpenSSH_6.9p1 и LibreSSL 2.1.8.

Нужно ли сначала выполнять ручное подключение (ручное подключение к Jumphost + ручное подключение к серверу) к каждому серверу, чтобы впоследствии они работали правильно?

Или есть какая-то настройка, которая побуждает меня подтвердить соединение даже при первом соединении через Jumphost? (без обновления OpenSSH)

1 ответ1

2

Это не соединяет "напрямую". С вашей текущей конфигурацией вы фактически делаете два SSH-соединения с хостом назначения. Один SSH-клиент работает на Jumphost, другой - на вашем локальном компьютере (общается с получателем через первый), а последний выдает сообщение об ошибке.

Ваш локальный клиент по-прежнему работает так же, как и раньше, но удаленный (jumphost) клиент работает в неинтерактивном режиме - у него нет псевдотерминала, и даже если он это сделал, весь его ввод / вывод подключен к сетевой стороне вашего локального клиента ». Таким образом, нет никакого способа, которым удаленный клиент мог бы выдать видимое приглашение (оно будет неверно истолковано вашим локальным клиентом как искаженный трафик SSH) или получить ввод подтверждения.

Вы можете избежать этого только путем полного удаления второго подключения (резервный), и упрощая ProxyCommand к одному из:

ProxyCommand ssh -W %h:%p jumpuser@jumphost

ProxyCommand ssh -x jumpuser@jumphost "nc -6 %h %p"

ProxyCommand ssh -x jumpuser@jumphost "socat stdio tcp6:%h:%p"

ProxyCommand ssh -x jumpuser@jumphost "(cat <&\$fd & cat >&\$fd) {fd}<>/dev/tcp/%h/%p"

Из этих методов предпочитайте ssh -W, если доступно, в противном случае используйте nc/ncat/socat, попробуйте взломать cat $ fd в качестве последнего средства. (Если Jumphost запрещает ssh -W и не имеет ни nc, ни ncat, ни socat, попробуйте поговорить со своей ИТ-командой о том, почему они намеренно затрудняют правильное использование Jumphost.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .