В основном требования такие:
- Сервер B должен быть доступен только с сервера ServerA. Вы не подключаетесь к нему напрямую.
- На сервере ServerA должно быть включено туннелирование TCP.
- ServerA должен быть доступен от вас.
Вы настраиваете подключение к ServerB через jumphost (в .ssh/конфигурация
):
Хост-серверB
ProxyJump ServerA
Это предполагает, что если вы вводите ssh серверA
, вы окажетесь на сервере А, и если вы, находясь на сервере А, войдете ssh-серверB
, вы окажетесь на ServerB. Например. имя «ServerB» должно быть разрешено на сервере ServerA, но ему все равно, разрешено ли оно на вашей стороне. Это могут быть имена хостов или «слаги» (псевдонимы). В последнем случае вы снова связываете их имена хостов или IP-адреса в .ssh/конфигурация
:
Хост-серверA
Имя хоста ip.add.re.ss
Хост-серверB
ProxyJump ServerA
Имя хоста host.na.me
Вы также можете указать, какое имя пользователя использовать для прокси-сервера:
Хост-серверA
Пользователь proxyuser
Имя хоста ip.add.re.ss
Хост-серверB
ProxyJump ServerA
Имя хоста host.na.me
После этого вы входите ssh-серверB
. OpenSSH подключается к серверу А и использует какой-то случайный порт для переадресации через это соединение на адрес сервера Б, порт 22. Это соединение разветвляется в фоновом режиме; OpenSSH сразу подключается к этому случайному проброшенному порту (на локальный хост, но действительно проверяет свой ключ в .ssh/известные_хосты
против имени «ServerB» и IP-адреса, указанного в HostName, если таковой имеется), поэтому вы окажетесь непосредственно на ServerB. Если вы введете «кто», будет сказано, что вы подключены с адреса ServerA. Любой, кто сидит между вами и сервером А, не может знать, что вы действительно разговариваете с сервером Б.
Вы можете использовать любые параметры командной строки SSH, они будут использоваться для СерверB соединение (сделанное через проброшенный порт). Например. если вы используете ssh -D 12345 пользователь@ServerB
, он подключится к серверу A как пользователь-прокси с портом, переадресованным на сервер B: 22, затем подключится к этому порту и аутентифицируется на сервере B как пользователь, а также установит прокси-сервер SOCKS5 на порт 12345.Адрес выхода для этого SOCKS5 будет ServerB, например. если вы используете этот прокси (например, в браузере), удаленные стороны увидят, что вы подключаетесь с адреса ServerB.
Вы можете складывать больше джампхостов, это тоже сработает:
Хост-серверB
ProxyJump ServerA
Хост-серверC
Сервер ProxyJumpC
и ssh-серверC
сначала подключится к серверу A с переадресацией портов на сервер B: 22, затем он подключится через эту переадресацию к серверу B с переадресацией другого порта на сервер C, а затем подключится к этому другому порту, и вы получите оболочку ServerC.
Обратите внимание, что вас попросят ввести пароль для каждый связь. Это довольно обременительно. Лучше настроить и использовать аутентификацию на основе ключей ssh-агент
.