1

У меня проблемы с туннелированием через сервер 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 ответ1

0

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

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


Edit: оказывается, 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

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