Туннель SSH (переадресация порта) против SSH ProxyJump, который я должен использовать в этом конкретном случае, Me -> JumpSever -> TargetServer

Я новичок в SSH Tunnel, я читал викиучебник OpenSSH Proxy снова и снова, но все еще в замешательстве.

Целью является создание двойного прокси только с туннелями SSH (переадресация портов) или ProxyJump (не совсем уверен, как их называть)

Например, мне 192.168.1.1 -> подключиться to -> Сервер переходов A 1.1.1.1 , тогда я действительно достигну Target ServerB 2.2.2.2 , если я настрою прокси socks5 с ServerA 1.1.1.1 , я в конечном итоге получу проксирование от IP 2.2.2.2

ServerB Я знаю, что делать с me > - to -> Server A , но я не знаю, как работать с Server A > - в -> Сервер B , (я имею в виду, что у меня есть все права доступа и привилегии root на этих серверах, но я не знаю, как их настроить.)

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

(Не возражаете, если вы хотите опубликовать точную команду или подход для этого примера. Это очень поможет)

0
задан 4 September 2021 в 02:05
1 ответ

Основные требования:

  • Сервер B должен быть доступен только с сервера A. Вы не подключаетесь к нему напрямую.
  • На сервере A должно быть включено туннелирование TCP.
  • Сервер А должен быть доступен для вас.

Вы настраиваете соединение с ServerB через jumphost (в .ssh/config):

Host ServerB
    ProxyJump ServerA

Это предполагает, что если вы войдете в ssh ServerA, вы окажетесь на ServerA, и если вы, находясь на ServerA, введете ssh ServerB, вы окажетесь на ServerB. Например. имя «ServerB» должно быть разрешено на сервере ServerA, но ему все равно, разрешено ли оно на вашей стороне. Это могут быть имена хостов или «слаги» (псевдонимы). В последнем случае вы снова связываете их имена хостов или IP-адреса в .ssh/config:

Host ServerA
    HostName ip.add.re.ss

Host ServerB
    ProxyJump ServerA
    HostName host.na.me

Вы также можете указать, какое имя пользователя использовать для прокси-хоста:

Host ServerA
    User proxyuser
    HostName ip.add.re.ss

Host ServerB
    ProxyJump ServerA
    HostName host.na.me

После этого вы вводите ssh-серверB. OpenSSH подключается к серверу А и использует какой-то случайный порт для переадресации через это соединение на адрес сервера Б, порт 22. Это соединение разветвляется в фоновом режиме; OpenSSH немедленно подключается к этому случайному переадресованному порту (к локальному хосту, но на самом деле он сверяет свой ключ в .ssh/known_hosts с именем «ServerB» и IP-адресом, указанным в HostName, если он есть), так что вы заканчиваются непосредственно на ServerB. Если вы введете «кто», будет сказано, что вы подключены с адреса ServerA. Любой, кто сидит между вами и сервером А, не может знать, что вы действительно разговариваете с сервером Б.

Вы можете использовать любые параметры командной строки SSH, они будут использоваться для соединения ServerB (выполненного через перенаправленный порт). Например.если вы используете ssh -D 12345 user@ServerB, он подключится к ServerA как proxyuser с портом, переадресованным на ServerB:22, затем подключится к этому порту и аутентифицируется на ServerB как пользователь, и он установит прокси SOCKS5 на порту 12345. Выходным адресом для этого SOCKS5 будет ServerB, например если вы используете этот прокси (например, в браузере), удаленные стороны увидят, что вы подключаетесь с адреса ServerB.

Вы можете добавить больше джампхостов, это тоже сработает:

Host ServerB
    ProxyJump ServerA

Host ServerC
    ProxyJump ServerC

и ssh ServerC сначала подключится к серверу A с переадресацией портов на сервер B:22, затем подключится через эту переадресацию к серверу B с другой порт перенаправляется на ServerC, а затем подключается к этому другому порту, и вы получите оболочку ServerC.

Обратите внимание, что вам будет предложено ввести пароль для каждого соединения. Это довольно обременительно. Лучше настроить аутентификацию на основе ключей и использовать ssh-agent.

2
ответ дан 4 September 2021 в 07:26

Теги

Похожие вопросы