Я хотел бы использовать OpenSSH, чтобы разрешить переадресацию портов через два перехода, причем последний переход подключается через обратный туннель.
Вот моя текущая установка:
Сервер B запускает sshd на порту 10000. Сервер C запускает sshd на порту 20000.
Клиент A подключается к серверу B через "обычный" SSH
Сервер C открывает обратный SSH-туннель к серверу B через порт 30000
Сервер B подключается к серверу C через этот обратный туннель.
Что я хочу сделать: открыть порт на клиенте A, который перенаправляет соединения с клиента A через сервер B на сервер C (через обратный туннель SSH, установленный между сервером B и сервером C)
Вот соответствующие команды, которые я сейчас использую:
Клиент A подключается к серверу B через «обычный» SSH:
ClientAHostName $ ssh -p 10000 User@ServerBHostName
Сервер C открывает обратный SSH-туннель к серверу B через порт 30000:
ServerCHostName $ ssh -p 10000 -N -R 30000:localhost:20000 User@ServerBHostName
Сервер B подключается к серверу C через обратный туннель:
ServerBHostName $ ssh -p 30000 User@localhost
Причина, по которой я хочу это сделать, заключается в том, что я могу управлять определенными службами на сервере C с клиента A через веб-браузер (с использованием перенаправленного порта). Из-за ограничений, налагаемых интернет-провайдерами клиента A и сервера C, я не могу подключиться напрямую с сервера B (или клиента A) к серверу C или с сервера C к клиенту A.
Чтобы упростить задачу, я люблю назначать каждому серверу номер порта или диапазон. Сохраняя то, с чего вы начали, B - 10000, C - 20000, забудьте о 30000.
Настроить:
A$ ssh -p 10000 -N -L 20000:localhost:20000 UserB@B
C$ ssh -p 10000 -N -R 20000:localhost:20000 UserB@B
Теперь ты должен уметь делать
A$ ssh -p 20000 UserC@localhost
чтобы получить оболочку на C, и предполагая, что вы хотите подключиться к веб-серверу, работающему на порту 8080 сервера C:
A$ ssh -p 20000 -N -L 8080:localhost:8080 UserC@localhost
Присоединиться:
http://localhost:8080/