4

В настоящее время, согласно обычной процедуре, у нас есть бастионный сервер в каждой общедоступной подсети в облачной сети, и мы пытаемся получить к нему доступ через следующую конфигурацию:

Host webserverA
    User myuser
    Hostname 192.168.1.10
    ForwardAgent yes
    Port 22
    ProxyCommand ssh -q bastionA nc %h %p
    IdentityFile ~/webserver.pem

Есть ли способ для меня расширить эту модель, чтобы иметь другой бастионный сервер?

BastionB -> BastionA -> Вебсервер A?

Причина в том, что я хотел бы рассматривать это как цепь доверия. Удалите что-нибудь, когда происходит довольно плохое событие.

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

1 ответ1

6

Способ 1 - лук (вложенные туннели)

С OpenSSH 7.3 и позже:

Host webserverA
    ProxyJump bastionA,bastionB

То же самое через командную строку:

$ ssh -J bastionA,bastionB webserverA

В качестве альтернативы (также с 7.3; не смешивайте это и выше):

Host webserverA
    ProxyJump bastionB

Host bastionB
    ProxyJump bastionA

В более старых версиях - в основном идентичные (но не копируются автоматически такие параметры, как ssh -v):

Host webserverA
    ProxyCommand ssh bastionB -W %h:%p

Host bastionB
    ProxyCommand ssh bastionA -W %h:%p

Этот метод инициирует все соединения локально, настраивая туннель ssh -W для каждого шага. Поэтому аутентификация происходит локально (ForwardAgent и GSSAPIDelegateCredentials не требуются), и ваш локальный файл .ssh/config применяется к каждому шагу. На стороне сервера требуется только базовая поддержка пересылки TCP, так же как и при использовании -W или -L .

Тем не менее, каждый уровень добавляет дополнительные издержки, так как он в конечном итоге несет SSH в SSH в SSH в SSH.

Обратите внимание, что каждый хост, кроме самого внешнего, перечисляет ProxyCommand через сервер непосредственно перед ним. Если бы у вас было 3 сервера, вы бы использовали [webserverA через bastionC], [bastionC через bastionB] и [bastionB через bastionA].

Способ 2 - прыжок за прыжком

Host webserverA
    ProxyCommand ssh bastionA -A ssh bastionB -W %h:%p

Этот метод инициирует переход подключений за прыжком, запуская ssh на каждом прыжке для подключения к следующему. Следовательно, ssh-agent и ForwardAgent должны быть включены (или GSSAPIDelegateCredentials если вы используете Kerberos); любые другие специальные настройки .ssh/config должны быть скопированы на все хосты бастиона.

С другой стороны, он требует меньших издержек протокола (максимум два уровня на каждом шаге).

(Изменить: добавлен -A всегда запрашивать переадресацию агента.)

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