9

У меня есть сервер Linux, и я хочу разместить его в домашней сети за маршрутизатором. Мне нужно когда-нибудь подключиться к этому серверу по ssh, но я не хочу настраивать переадресацию портов, потому что у меня нет доступа к маршрутизатору, и я также не знаю ip маршрутизатора.

Что я могу сделать, так это поместить некоторую программу на сервер linux, поэтому, когда она подключена к Интернету, она будет постоянно отправлять данные на мой другой сервер онлайн, чтобы я знал IP-адрес этого. Но есть ли способ ssh к серверу за роутером извне? что-то вроде NAT или сокета, который поддерживает сетевое соединение?

большое спасибо

4 ответа4

20

То, что вы хотели бы сделать, это ssh ОТ вашего "сервера linux" ДО чего-то внешнего, такого как "my_other_server" или что-то еще, к которому оба сервера могут добраться.

Вы бы использовали пересылку удаленного порта SSH.
[user@linux_server]$ ssh -R8022:localhost:22 my_other_server.com
Объяснение: Подключитесь к my_other_server и откройте там порт 8022, который переадресует мне обратно на порт 22.

С my_other_server.com вы сможете подключиться по ssh к localhost через порт 8022 и перенаправить свой трафик на linux_server по туннелю linux_server -> my_other_server [user@linux_server]$ ssh -p8022 localhost
Объяснение: Подключитесь к себе через порт 8022, который пересылается на linux_server.

Если у вас есть проблемы с выпадением первоначального туннеля linux_server -> my_other_server, вы можете создать скрипт, чтобы он оставался открытым, настроить параметры keepalive или использовать autossh.

3

Вы можете использовать своего рода VPN, чтобы заставить это работать, но это потребовало бы, чтобы у вас был сервер, к которому недоступный сервер мог бы получить доступ. Затем вы можете настроить OpenVPN на сервере, ПК и сервере с межсетевым экраном, включить client-to-client , и все готово. http://openvpn.net/howto.html

0

Этот ответ основан на принятом, но добавляет детали, которые позволили мне сделать это. Я прошу прощения за объяснение пешехода, так как это совсем не моя экспертиза.

Предположим, у вас есть два компьютера, A и B Вы хотите ssh от A до B , и вы не можете выполнять переадресацию портов в подключенных к ним маршрутизаторах.

Как говорится в принятом ответе, для этого вам нужен сервер S : на компьютере B вы разрешите ssh соединения, поступающие из S ; и с компьютера A вы получите доступ к этому туннелю в S чтобы добраться до B

Но как вы получаете этот сервер S? Я нашел serveo (ссылка: https://serveo.net/). Это очень простое использование. Вам не нужно ничего устанавливать или регистрироваться, и это бесплатно. Согласно веб-сайту, следующие шаги:

  1. Подумайте о псевдониме для компьютера B Например, computer_B_alias .

  2. На компьютере B выполните ssh -R computer_B_alias:22:localhost:22 serveo.net .

  3. Теперь вы можете получить доступ к компьютеру B с компьютера A , выполнив на компьютере A: ssh -J serveo.net user@computer_B_alias , где вы должны заменить user именем пользователя на компьютере B

PS: Конечно, вы делаете пункт 2 автоматической задачей при запуске компьютера B

PSS: прежде чем попробовать это, убедитесь, что ssh установлен на обоих компьютерах. Для Ubuntu sudo apt-get install ssh сделает эту работу.

0

Долго отвечать.Надеясь, что это может помочь кому-то, кто ищет то же самое сейчас.

Если вы хотите получить доступ к серверу за NAT и не хотите писать код, вы, вероятно, можете воспользоваться инструментом ниже и использовать то, что вам подходит.

Оба вышеперечисленных инструмента предполагают, что у вас есть доступ к машине linux для установки их клиента. Некоторые из их преимуществ:

  • Оба дают вам доступ к терминалу с помощью веб-интерфейса
  • Вам не нужен собственный промежуточный обратный хост ssh.
  • Очень прост в установке
  • Оба с открытым исходным кодом

Я лично больше предпочитаю tmate, так как вы можете разместить сервер tmate на своем промежуточном сервере (для обратного ssh), в то время как телеконсоль может подключаться только к своим собственным серверам для обратного ssh.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .