Используйте ProxyCommand для всех SSH-подключений

Используйте ProxyCommand для всех SSH-подключений

Я размышлял над идеей создания прокси-сервера SSH или, как его еще называют, Jump Host, который я бы использовал для подключения ко всем своим"скрытый"Серверы. В общем, у меня следующая настройка. Обратите внимание, что я намеренно использую здесь IP-адреса вместо имени хоста.

<client> ---> <proxy_ssh> ---> <192.168.0.*>

Я хочу, чтобы это было максимально прозрачно для пользователей. Поэтому в идеале пользователям нужно будет только выполнить следующую команду

# ssh [email protected]

Чтобы это заработало, я создал следующее .ssh/config.

Host *                                                                                                                                                                           
    ServerAliveInterval 240                                                                                                                                                      
    Compression yes                                                                                                                                                              
    ForwardAgent yes                                                                                                                                                             
    ForwardX11 yes                                                                                                                                                               

Host 192.168.0.*                                                                                                                                                                   
    ProxyCommand ssh my_user@proxy_ssh.example.com netcat -w 120 %h %p

Это работает отлично. Но это немного утомительно, если мне нужно работать с большим количеством сетей за моим proxy_sshсервером. Поэтому я попробовал просто добавить ProxyCommandв Host *раздел, но это не сработало.

Я хотел сделать это более прозрачным для конечного пользователя и изменил конфигурацию ssh следующим образом, просто исключив конкретное определение хоста.

Host *
    ServerAliveInterval 240                                                                                                                                                      
    Compression yes                                                                                                                                                              
    ForwardAgent yes                                                                                                                                                             
    ForwardX11 yes                                                                                                                                                               
    ProxyCommand ssh my_user@proxy_ssh.example.com netcat -w 120 %h %p

Это имело последствия, так что я больше не мог подключаться к конечному хосту. Соединение просто истекло!

Отсюда мой вопрос: есть ли способ сделать это более прозрачным, чтобы все мои SSH-соединения использовали хост proxy_ssh?

решение1

Пример выше сделает его рекурсивным, каждое соединение будет использовать команду proxy, которая снова является ssh с другой командой proxy. Хороший способ DOS вашего proxy.

Вам следует исключить прокси из списка, использовать -F /dev/nullдля игнорирования конфигурации команды proxy или просто игнорировать команду proxy для proxy ssh:

ProxyCommand ssh -oProxyCommand=none my_user@proxy_ssh.example.com netcat -w 120 %h %p

решение2

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

Host proxy_ssh.example.com
  ProxyCommand none

В противном случае он попытается использовать команду proxy, чтобы добраться до самого хоста перехода.

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