Создание многоадресного ssh-туннеля через сервер ssh1

Создание многоадресного ssh-туннеля через сервер ssh1

У меня проблемы с туннелированием через сервер ssh1. Это на машине клиента, и нет, они не будут обновляться до ssh2.


Немного предыстории: я могу успешно проложить туннель через шлюз клиента

localhost -> gateway.customer.example.com -> srv.customer.internal

используя эту конфигурацию

Host gateway
    Hostname gateway.customer.example.com
    IdentityFile ~/.ssh/mykey
    ...

Host srv-tunnel
    ProxyCommand ssh gateway -W srv.customer.internal:22
    IdentityFile ~/.ssh/mykey
    ...

а потом просто

$ ssh srv-tunnel

который отлично работает и автоматически устанавливает туннель, используя ключевой файл ~/.ssh/mykey.


Я попробовал использовать похожую конфигурацию для этого многоадресного туннеля:

localhost -> gateway.customer.example.com
                |
                v
             onemoregateway.customer.internal -> srv2.customer.internal

но на этот разonemoregatewayработает ssh 1 и не имеет ncдоступныхЯ могу подключиться по ssh onemoregateway, но в командной строке сообщается, что The only permitted commands are ssh and scp.при попытке настроить переадресацию, как указано выше, ssh завершает работу с ошибкой stdio forwarding require Protocol 2.

Однако я не могу напрямую ssh из onemoregatewayв srv2, потому что закрытый ключ находится только на моей локальной машине. Чтобы все усложнить, мне нужен один ключ для gateway, а другой ключ для onemoregatewayи srv2.

Итак, как мне проложить туннель srv2?

Я думаю, что это как-то возможно, поскольку мои коллеги сделали это с помощью Putty+Pageant в Windows, но у меня Linux.

решение1

Хорошо, я нашел способ это сделать, но, похоже, нет способа сделать туннелирование прозрачным.

Host gateway
    Hostname gateway.customer.example.com
    IdentityFile ~/.ssh/mykey
    ...

Host tunnel-to-srv2
    ProxyCommand ssh gateway -W onemoregateway.customer.internal
    IdentityFile ~/.ssh/myotherkey
    Protocol 1
    LocalForward 10022 srv2.customer.internal:22
    ...

Host srv2
    Hostname localhost
    Port 10022
    IdentityFile ~/.ssh/myotherkey
    Protocol 1
    ...

И теперь мне нужно сделать

$ ssh tunnel-to-srv2

и, наконец, в отдельном терминале*

$ ssh srv2

* Я не могу найти способ отправить процесс туннелирования ssh в фоновый режим, даже с помощью-fNT


Редактировать: оказывается, onemoregatewayдействительно есть nc, и я могу его запустить, но мне нужно использовать полный путь/bin/nc

Итак, в конце концов у меня такая конфигурация

Host gateway
    Hostname gateway.customer.example.com
    IdentityFile ~/.ssh/mykey
    ...

Host tunnel-to-srv2
    ProxyCommand ssh gateway -W onemoregateway.customer.internal
    IdentityFile ~/.ssh/myotherkey
    Protocol 1
    ...

Host srv2
    ProxyCommand ssh tunnel-to-srv2 /bin/nc srv2.customer.internal 22
    IdentityFile ~/.ssh/myotherkey
    Protocol 1
    ...

и я получаю прозрачные туннельные прыжки, просто запустив

$ ssh srv2

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