
Извините, если этот вопрос уже задавался, но сейчас я пытаюсь найти решение, которое позволит нам устанавливать 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.