Прокси-соединения SSH

Прокси-соединения SSH

Извините, если этот вопрос уже задавался, но сейчас я пытаюсь найти решение, которое позволит нам устанавливать SSH-подключения аналогично тому, как работает RDP-шлюз. Для тех, кто не знаком, RDP-шлюз позволяет вам по сути проксировать RDP-подключения через другой сервер. Удаленный рабочий стол будет прозрачно аутентифицироваться на сервере RDP-шлюза и устанавливать соединение с сервером конечной точки оттуда, позволяя вам ссылаться на серверы конечных точек по частным IP-адресам или внутренним DNS-именам, ограничивая вашу уязвимость.

В настоящее время я думаю о том, чтобы настроить переадресацию портов через SSH, чтобы каждый сервер, к которому нам нужно иметь доступ за туннельным прокси, находился на другом порту, который перенаправляется промежуточным сервером. Однако это не кажется оптимальным решением, поэтому мне интересно узнать, есть ли лучший способ сделать это.

решение1

В терминах SSH вы часто говорите охозяин бастионаилисервер прыжков- отдельная машина (обычно в вашей DMZ), которая принимает входящие SSH-подключения и с которой вы затем можете установить SSH-подключение к реальным системам, которыми вы управляете.

                                                                             ==> | Server1 |
 _________                             ___________                         /      ---------
| user PC |   ===(SSH on port 22)===> | jump host |  ===(SSH on port 22)== ==+>  | Server2 | 
 _________                             ___________                         \      _________
                                                                             ==> | Server3 |

Часто для повышения безопасности сервер перехода требует двухфакторную аутентификацию и/или принимает входящие сеансы SSH только после установления VPN-подключения.

Вместо того, чтобы сначала войти на хост перехода и из командной строки запустить там второй сеанс SSH, OpenSSH позволяет вам настроить это с помощью одной команды

Я предпочитаю устанавливать все настройки явно в my ~/.ssh/configс коротким псевдонимом для каждого хоста. Таким образом, мне не нужно будет использовать флаги командной строки, и я могу просто ввести less и use ssh Destinationи все.

Host jumphost
    Hostname jumphost.example.com
    User serverfault
    ForwardAgent yes
    AddKeysToAgent yes
    UseKeychain yes                                  # Specific to OS X 
    IdentityFile ~/.ssh/id_rsa.jumphost

Host server1
    Hostname server1.int.example.com
    User hbruijn 
    ForwardAgent yes
    AddKeysToAgent yes
    UseKeychain yes                                  # Specific to OS X
    IdentityFile ~/.ssh/id_rsa.int.example.com
    ProxyJump jumphost

ProxyJump— это относительно новая настройка, которую я нахожу несколько более интуитивно понятной в использовании, чем ProxyCommand. Теперь ssh server1будет делать именно то, что вам нужно, сначала создаст сеанс, используя [email protected]в качестве первого перехода, из которого вы туннелируете к следующему переходу с опциональным другим ключом ssh и другим именем пользователя [email protected].

Вы также можете использовать команду ProxyJump непосредственно из командной строки:

ssh -J [email protected] [email protected]

Другой подход обсуждается вэтот вопрос и ответ

решение2

Каноническое решение — развернуть IPv6 (и/или VPN) и избегать такого рода обходных путей с самого начала, но если вы не можете сделать это сегодня, то это называется jump box или bastion host или похожими терминами. Это просто машина, которую вы устанавливаете, на которую ваши пользователи могут входить с помощью ssh, а затем по ssh дальше на внутренние хосты, к которым у этого box есть сетевой доступ. У sshкоманды даже есть опция командной строки, которая автоматизирует подключение через jump host.

     -J destination
             Connect to the target host by first making a ssh connection to
             the jump host described by destination and then establishing a
             TCP forwarding to the ultimate destination from there.  Multiple
             jump hops may be specified separated by comma characters.  This
             is a shortcut to specify a ProxyJump configuration directive.
             Note that configuration directives supplied on the command-line
             generally apply to the destination host and not any specified
             jump hosts.  Use ~/.ssh/config to specify configuration for jump
             hosts.

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