Как использовать SSH вне домашней сети

15

Я недавно настроил SSH на моем Raspberry Pi. Все идет гладко, особенно с тех пор, как я могу управлять компьютером через iPhone с помощью приложения Server Auditor . К сожалению, это работает только через локальную сеть.

Как я могу заставить мой SSH работать, когда я вне дома? (Предпочтительно работает с приложением.)

xxmbabanexx
источник
Вы можете перенаправить порт с вашего роутера?
SteveIrwin
1
@ SteveIrwin Я, скорее всего, могу, но, поскольку я не разбираюсь в сетях, я бы предпочел простое решение, такое как Port Map . На самом деле ... если я поделюсь интернетом моего Mac с моим Pi, смогу ли я поделиться перенаправленными портами?
xxmbabanexx
1
настройка переадресации порта, вероятно, по крайней мере так же проста, как использование Port Map. Вы должны рассказать нам больше о том, как настроена ваша локальная сеть
John La Rooy
Лучше всего установить сервис Weaved (www.weaved.com) и покончить с ним. Все остальные учебники, которые вы найдете в Интернете, приведут вас к разочаровывающей дороге.
Игорь Ганапольский
для поста, в котором предлагается использовать socketxp, используйте следующую команду для загрузки socketxp в RPI curl -O portal.socketxp.com/download/arm/socketxp && chmod + wx socketxp && sudo mv socketxp / usr / local / bin вместо linux файл.
Jeonghoon

Ответы:

20

Вот шаги, которые я использовал (в Debian), которые вы можете найти полезными.

1.Настройка статического IP для Pi.

Откройте файл интерфейсов с помощью команды

sudo nano /etc/network/interfaces

b.Измените файл интерфейсов следующим образом (это работает для меня, я не уверен, можно ли исключить несколько строк).

auto lo
iface lo inet loopback
iface eth0 inet static
address 192.168.1.2  #static ip you want for the pi
netmask 255.255.255.0
gateway 192.168.1.1    # the ip address of the router

c.Check если Ip изменен с помощью IFCONFIG команды

2.Настройка динамического DNS

Скорее всего, IP-адрес, назначенный вашим интернет-провайдером, является динамическим, и поэтому нам нужен способ разрешить изменения в IP-адресе. Для этого я использую программное обеспечение dnsdynamic и ddclient. Оба они бесплатны.

Зарегистрируйте аккаунт в dnsdynamic.

Б. Добавьте новый домен и выберите имя и домен из списка. Вы можете выбрать любой из доступных доменов, выбрав субдомен. Нажмите на проверку доступности, а затем добавьте

скриншот dnsdynamic

3. Установка ddclient на Пи

Установите ddclient с помощью команды

sudo apt-get install ddclient

b. Откройте файл конфигурации для ddclient с помощью следующей команды и добавьте следующие строки.

sudo nano /etc/ddclient.conf

и измените файл следующим образом.

# /etc/ddclient.conf
daemon=600
timeout=10
ssl=yes
protocol=dyndns2
use=web, web=myip.dnsdynamic.com
server=www.dnsdynamic.org
login=x@gmail.com  #userid for dnsdynamic.com
password='xxxx'      #password for the same put inside quotes
x.dnsdynamic.com  #the domain name you created

и сохраните файл.

Мы хотим, чтобы служба ddclient запускалась автоматически при перезагрузке. Выполните следующие действия.

sudo nano /etc/rc.local

Добавьте следующую команду перед выходом 0 (последняя строка)

sudo /usr/sbin/ddclient -daemon 600 -syslog

Сохраните файл. Для запуска ddclient либо перезагрузите ваш pi, либо выполните приведенную выше команду в командной строке. Он будет обновлять ваше доменное имя, изменяя текущий IP-адрес при необходимости.

4. Переадресация портов

Найдите модель вашего роутера.

Перейдите на portforward.com

c.Введите марку и модель своего маршрутизатора, чтобы найти подробное руководство по порту переадресации.

После выбора марки и модели маршрутизатора нажмите «Руководство по умолчанию» на перенаправленной странице.

д. В текстовом поле « Статический Ip» введите статический IP-адрес Pi, который вы указали в шаге 1.

f.Следуйте шагам и перенаправьте порт 22. Исходный порт должен быть 22, а порт назначения может быть любым. Пожалуйста, не забудьте использовать порт назначения при sshing в pi. Чтобы избежать путаницы, я склонен использовать один и тот же источник и пункт назначения порт.

Если вы следовали учебному пособию, войдите в свой пи из любого места, заменив IP-адрес на доменное имя. Например, я использую pi@hometorrent.dnsdynamic.com: 22 для ssh в мой пи.

Стив Ирвин
источник
Спасибо! Когда я вернусь с посещения Эксетера, я попробую это!
xxmbabanexx
+1 Великий ответ, тем не менее, вам действительно нужно использовать sudoв /etc/rc.local, не то, что уже работает как корень?
HeatfanJohn
Таким образом полностью облажались мои конфигурации Ngrok и Weaved. Теперь я не могу подключиться вообще!
Игорь Ганапольский
2

Сначала вы захотите настроить переадресацию портов. Каждый маршрутизатор немного отличается, так что вам придется искать особенности вашего маршрутизатора.
Существуют общие инструкции по переадресации портов, которые могут работать для большинства маршрутизаторов, но я бы посоветовал найти руководство для вашей реальной модели маршрутизатора.

Установите незабываемый порт для связи с вашим Raspberry Pi, например, 23456 или что-то еще. Будьте внимательны, чтобы не перезаписать общие номера портов .

Наконец, используя ssh, сделайте следующее:

$ ssh -p 23456 user@IP

Где:

phalt
источник
Почему я не могу использовать порт 22 вместо обычного 23456?
Игорь Ганапольский
1
@IgorGanapolsky вы можете сделать это, но 1) если у вас есть другой компьютер, к которому вы хотите подключиться через SSH за пределами вашего дома, возникнет конфликт и 2) более рискованно, так как многие «хакеры» пытаются войти через порт 22 так что закрывать его часто рекомендуется на серверах
meneldal
2

Доступ к вашему RaspberryPi (или даже к ноутбукам / серверам) из-за пределов вашей домашней сети (то есть из Интернета) не является легкой задачей, потому что ваш домашний ноутбук или RaspberryPi имеет только локальный IP-адрес (в диапазоне 10.xxx или 192.168.xx ассортимент). У него нет публичного IP-адреса, который виден из Интернета.

Простым ответом на ваш вопрос является использование бесплатных онлайн-сервисов, таких как SocketXP, который обеспечивает безопасную общедоступную конечную точку туннеля для SSH в RaspberryPi за пределами домашней сети.

SocketXP предоставляет простой, безопасный и простой способ получить доступ к вашему домашнему RaspberryPi из внешней сети. SocketXP не требует от вас взломать какие-либо настройки в вашем маршрутизаторе WiFi. Работает из коробки. Чтобы узнать, как настроить RaspberryPi для SSH извне, прочтите этот блог о том, как удаленно подключить SSH к RaspberryPi с помощью SocketXP.

Как настроить SocketXP:

Шаг 1 : Установите клиент SocketXP на RaspberryPi, используя следующую команду.

$ curl -O https://portal.socketxp.com/download/linux/socketxp && chmod +wx socketxp && sudo mv socketxp /usr/local/bin

Шаг 2. Подключите клиент SocketXP к облачной службе SocketXP, используя следующую команду. Вам нужно зарегистрироваться на https://portal.socketxp.com, чтобы получить свой уникальный токен авторизации.

$ socketxp -register "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NDk1MTg0MDAsImlkIjoiZ2FuZXNodmVscmFqYW5AZ21ha6K208n0.cB2uYevpH4lWIQGQUJdQ0eiEDqS8OiP_YOiqernnui3rjjadfadsfsfas34"

Шаг 3 : Получите общедоступную конечную точку туннеля для доступа к вашему RaspberryPi из Интернета.

$ socketxp -connect tcp://localhost:22

Tunnel Access -> tunnel.socketxp.com:35277

Шаг 4 : SSH в ваш RaspberryPi из Интернета, используя следующую команду.

$ ssh raspberry-username@tunnel.socketxp.com -p 35277

где "raspberry-username" - это имя пользователя / пароль, которые вы используете для входа по SSH в RaspberryPi.

Ганеш Велражан
источник
1

Этот вопрос устарел, так как со временем у вас будет меньше шансов получить общедоступный IPv4-адрес. Скорее всего, вы находитесь за CGNAT, то есть вы используете один публичный IPv4 с другими клиентами интернет-провайдера. Таким образом, невозможно сделать переадресацию порта на ваш PI или что-то еще.

Если у вас есть IPv6, вы можете дать вашему PI статический адрес и разрешить доступ к нему на своем маршрутизаторе. Многие операторы мобильной связи теперь предоставляют IPv6 для телефонов. Старые "наземные" интернет-провайдеры (Fiber, DSL, коаксиальный кабель и т. Д.) Часто тянут свои ноги.

Вы также можете получить дешевый VPS (виртуальный частный сервер) с общедоступным IPv4 где-нибудь в облаке и создать SSH-туннель от PI до VPS.

Lenne
источник
0

Вдобавок к ответу phalt, вы должны проверить одну из динамических служб DNS, например No IP . Они позволяют вам получить доступ к вашей домашней сети под статическим именем хоста, хотя ваш IP-адрес может меняться ежедневно из-за того, что ваш DSL или кабельный провайдер отключил вас. У них также есть хорошая стартовая страница, которая также знакомит вас с настройкой маршрутизатора соответственно.

Возможно, вы захотите установить inadynпакет на Raspberry Pi, чтобы обновить записи DNS без IP-адреса при изменении IP-адреса. Вы можете сделать это, запустив:

sudo apt-get install inadyn

От Инадыни README я взял этот пример звонка:

inadyn --dyndns_system default@no-ip.com -u USER-p PASS -a HOST

Надеюсь это поможет.

Arne
источник
No-Ip имеет DUC (клиент динамического обновления), который гарантирует, что ваш IP-адрес не изменится.
Игорь Ганапольский
0

Дополнительно к ответу Стива Ирвина:

Шаг 1:

если вы подключаетесь через WLAN, используйте:

iface wlan0 inet static
wpa-ssid "xxx" #<=your ssid
wpa-psk "yyy"  #<=your pw
address 192.168.1.xxx #<=preferred static ip (xxx<255)
netmask 255.255.255.0
gateway 192.168.1.1 #<=router's ip

Шаг 2:

после того, как вы изменили выше, вам нужно перезапустить networking:

sudo /etc/init.d/networking restart
Дэвид Билен
источник
Я также добавил 2 строки перед статическим блоком, auto wlan0 allow-hotplug wlan0 Я нашел это в этом посте raspberrypi.stackexchange.com/a/10320/10148 Я также пытался сделать это без них, но что-то не получилось.
XandruCea
Этот ответ следует считать устаревшим из-за изменений в конфигурации сети Raspbian и системы инициализации.
Златовласка
0

Кроме того, некоторые маршрутизаторы имеют встроенную поддержку некоторых служб Dynamic DNS, вы можете включить эту опцию (если она существует) на вашем маршрутизаторе, чтобы избежать установки клиента на PI (и сэкономить немного времени, пока вы на нем).

user17925
источник
0

Итак, у вас есть ssh-сервер (ваш Raspberry PI) за брандмауэром (ваш маршрутизатор), и вы хотите подключить его из любого места. Предположим, что ваш ssh-сервер правильно настроен, т. Е. При запуске 'ssh username @ localhost date' на Raspberry отображается текущая дата / время.

Вам нужно решить две проблемы:

  • Ваш маршрутизатор должен перенаправить фиксированный порт на ваш ssh-порт raspberry (обычно 22).
  • Вы должны знать публичный IP-адрес вашего маршрутизатора (который обычно изменяется при повторном подключении маршрутизатора и не реже одного раза в сутки).

Переадресация портов и DynDNS

Решения существуют (как было отмечено другими):

  • Открытие переадресации портов на вашем маршрутизаторе является специфическим для каждого маршрутизатора и обычно выполняется на веб-сайте настроек маршрутизаторов.
  • Определить текущий ip проще всего на внешнем веб-сайте ( https://www.google.com/search?q=whats+my+ip ). Если ваш IP-адрес регулярно меняется, вы можете получить динамическую запись DNS ( https://www.noip.com/ , https://dyn.com/dns/ и т. Д.).

При правильной настройке подключение вашего rasbperry pi возможно с помощью:

ssh username@[yourIP] -p [port] 
# or using dyndns 
ssh username@myname.dyndns.org -p [port]

Использование sshhub.de

Еще одно очень удобное решение, не упомянутое до сих пор, - это SSHHub (дисклеймер, я автор). Он использует собственную пересылку ssh для доступа к вашему Rasperry PI из любого места. Это надежный, бесплатный и довольно простой в настройке . Зарегистрируйтесь один раз:

ssh info@sshhub.de register

запустить на вашем Raspberry PI:

while true; do ssh [username]@sshhub.de -R 22:localhost:22 -N -o ServerAliveInterval=10; sleep 10; done

...вот и все! Вы можете подключить Raspberry Pi из любого места:

ssh -J [username]@sshhub.de localhost
Оливер
источник
Привет и добро пожаловать в Raspberry Pi! Пожалуйста, возьмите тур и посетите справочный центр, чтобы увидеть, как все работает здесь. Спасибо за ваш вклад, но, пожалуйста, обратите внимание, что мы просим вас раскрыть вашу принадлежность в ваших ответах . (Я предполагаю, что вы являетесь автором рекомендуемого программного обеспечения.)
Ghanima
Спасибо, что указал мне правильное направление. Я автор. Я, конечно, хочу дать оценку своим ответом для людей, которые ищут решение. И я надеюсь, что мой так же хорошо, как и сам sshhub.
Оливер
0

Вы можете использовать VPN, чтобы включить входящий доступ к вашему пи. OpenVPN - это одно из решений, которое требует наличия компьютера, доступного из Интернета (входящий порт). Однако, если у вас есть один доступный компьютер, другим компьютерам это не нужно, поскольку они могут быть клиентами сервера OpenVPN.

Другим вариантом будет использование службы, такой как ZeroTier, которая предоставляет централизованные серверы для создания VPN, поэтому вам не нужно запускать собственный сервер. Это также бесплатно.

Rebroad
источник
Еще один очень хороший вариант - использовать Wireguard .
Инго