Я новичок в 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 на этих серверах, но я не знаю, как их настроить.)
Я много для медленного ученика, любые идеи будут действительно признательны,
(Не возражаете, если вы хотите опубликовать точную команду или подход для этого примера. Это очень поможет)
Основные требования:
Вы настраиваете соединение с 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
.