2008-09-05 1 views
5

У меня небольшая локальная сеть. Только один из машин доступен для внешнего мира (это нелегко заменить). Я хотел бы иметь возможность настроить его так, чтобы запросы ssh, которые не вошли в стандартный порт, перешли на другую машину. Это возможно? Если да, то как?Можно ли пересылать запросы ssh, которые поступают через определенный порт на другой компьютер?

Ох, и все эти машины работают под управлением Ubuntu или OS X.

ответ

11

Другой путь будет использовать SSH туннелирование (что происходит на стороне клиента).

Вы бы команда SSH так:

ssh -L 8022:myinsideserver:22 [email protected] 

, который соединяет вас к машине, доступные из внешнего (myoutsideserver) и создает туннель через это соединение SSH к порту 22 (стандартный SSH порт) на сервере, доступном только изнутри.

Тогда вы могли бы сделать еще одну команду SSH, как это (оставляя первый еще подключен):

ssh -p 8022 [email protected] 

Это подключение к порту 8022 на вашем локальном хосте будет получить туннелируется через первое соединение SSH, принимая тебя myinsideserver.

Может быть что-то, что вам нужно сделать на myoutsideserver, чтобы разрешить пересылку порта ssh. Сейчас я проверяю это дважды.

Редактировать

Хммм. В ssh manpage сказано следующее: ** Только суперпользователь может перенаправлять привилегированные порты. **

Этот тип подразумевает, что первое соединение ssh должно быть как root. Может быть, кто-то еще может это прояснить.

Похоже, привилегии суперпользователя не требуется до тех пор, пересылаемого порт (в данном случае 8022) не привилегированный порт (например, 22). Спасибо за разъяснение Mike Stone.

+1

Я пытался выяснить, как это сделать и, наконец, натолкнулся на это! Мне жаль, что я не мог нажать стрелку вверх больше одного раза! – 2018-02-13 20:23:02

3

@Mark Biek

Я собирался сказать, что, но вы бьете меня к нему! В любом случае, я просто хотел бы добавить, что есть также опция -R:

ssh -R 8022:myinsideserver:22 [email protected] 

Разница заключается в том, что машина, которую вы подключаетесь к/с. Мой босс показал мне этот трюк не так давно, и это определенно очень приятно узнать ... мы были за брандмауэром и должны были предоставить внешний доступ к машине ... он обошел это с помощью ssh -R на другой машине что было доступно ...то соединения с этой машиной были отправлены в машину за брандмауэром, поэтому вам нужно использовать -R или -L на основе того, на каком компьютере вы находитесь и к которому вы подключаетесь.

Кроме того, я уверен, что вы вправе использовать обычного пользователя, пока порт, который вы пересылаете (в данном случае порт 8022), находится не ниже ограниченного диапазона (который, я думаю, равен 1024, но я может быть ошибочно), потому что это «зарезервированные» порты. Не имеет значения, что вы перенаправляете его на «ограниченный» порт, потому что этот порт не открывается (машина только имеет трафик, отправленный ему через туннель, он не знает туннеля), порт 8022 IS будучи открытым и поэтому ограничен как таковой.

РЕДАКТИРОВАТЬ: только помните, что туннель открыт только в том случае, если начальный ssh ​​остается открытым, поэтому, если он истечет или выйдет из него, туннель будет закрыт.

0

В Ubuntu , вы можете установить Firestarter, а затем использовать функцию Forward Service для пересылки трафика SSH с нестандартного порта на вашем компьютере с внешним доступом к порту 22 на машине внутри вашей сети.

В OS X вы можете редактировать файл /etc/nat/natd.plist, чтобы включить перенос портов.

0

Не вмешиваясь в правила брандмауэра, вы можете настроить файл ~/.ssh/config.

Предположим, что 10.1.1.1 является системой «шлюза», а 10.1.1.2 является «клиентской» системой.

Host gateway 
    Hostname 10.1.1.1 
    LocalForward 8022 10.1.1.2:22 

Host client 
    Hostname localhost 
    Port 8022 

Вы можете открыть соединение SSH к 'шлюз' через:

ssh gateway 

В другом терминале, открыть соединение с клиентом.

ssh client 
Смежные вопросы