Как я могу помочь кому-то (например, бабушке) через SSH, который находится за маршрутизатором NAT?


14

Для быстрой помощи другим очень полезен SSH, особенно в сочетании с GNU Screen. Обычно пользователи находятся за маршрутизатором NAT. Даже если пользователь может настроить маршрутизатор, потребуется некоторое время, чтобы запомнить пароль, найти нужные параметры и т. Д.

Итак, какой самый простой способ помочь другим по SSH, если они находятся за маршрутизатором NAT?

В настоящее время я говорю людям, чтобы открыть терминал, запустите приведенную ниже команду и передайте мне их IP с сайта, такого как http://ip.appspot.com/ :

sudo apt-get install openssh-server ssh-import-id && ssh-import-id lekensteyn

Очевидно, что это не будет работать, если они находятся за маршрутизатором NAT или имеют настроенный персональный брандмауэр. Итак, есть ли что-то вроде:

sshd --accept-help-from lekensteyn

Я не ищу альтернативы вроде Teamviewer, просто оболочку вроде SSH. Это должно быть с открытым исходным кодом тоже.

Ответы:


13

Если ваш собственный компьютер может принимать соединения SSH, есть способ использовать технику, к которой подключился Павлос Г., без дополнительного компьютера.

Сначала вам нужен неимущий * пользователь, к которому ваш друг подключится как:

sudo adduser reverse --shell /bin/false

Скажи своему другу, чтобы начать туннель:

ssh -N -R 62222:localhost:22 reverse@lekensteyns-server

Затем на своем компьютере ( lekensteyns-server) запустите обратное соединение:

ssh -p 62222 localhost

* Я не знаю достаточно о безопасности, чтобы иметь возможность давать советы по созданию соответственно малообеспеченного пользователя. Вероятно, это то, что следует рассмотреть в отдельном вопросе.



2

Исходя из ваших конкретных потребностей, я бы, вероятно:

  1. Попросите их сказать мне пароль маршрутизатора
  2. Вход и настройка переадресации портов только для порта 22
  3. Соединитесь через SSH (или туннелирование SSH, если вам нужны открытые дополнительные порты) и получите работу.

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

Более подробную информацию можно найти здесь


1), вероятно, не будет работать, так как доступ к маршрутизатору часто запрещен для публики.
Лекенштейн

2

Я просто обычно настраиваю туннель IPv6 (из sixxs.net или he.net), если у них еще нет IPv6, и тогда компьютер имеет статический адрес, и мне не нужно связываться с NAT. Мне также нравится устанавливать аутентификацию на основе ключей (тогда они не должны сообщать вам свой пароль).

У Sixxs есть собственный клиент, которым вы пользуетесь. Он работает практически за любым NAT и автоматически обновляется при изменении адреса IPv4. У них есть инструкции о том, как его настроить, и он упакован для Ubuntu.

Hurricane Electric использует туннель, куда пакеты IPv6 отправляются как полезные данные пакета IPv4. В отличие от Sixxs, TCP / UDP не используется. Это означает, что NAT, за которым вы находитесь, должен поддерживать пересылку PROTOCOL 41 (не порта), и его может использовать только один компьютер за NAT. Программное обеспечение для использования такого туннеля встроено в Ubuntu.

Для ОН я использую что-то вроде этого в /etc/network/interfaces:

auto he-ipv6
iface he-ipv6 inet6 v4tunnel
     endpoint 216.218.226.238
     address  2001:470:a29f::2
     netmask  64
     ttl 64
     up ip -6 route add default dev he-ipv6
     down ip -6 route del default dev he-ipv6

Другая вещь, которую вам нужно сделать, это обновить конечную точку туннеля. Поскольку вы не знаете, когда изменится внешний IP, вам нужно будет просто пытаться обновлять конечную точку каждые несколько минут. Вы можете использовать что-то вроде этого и запустить его из cron:

#!/bin/sh
echo -n "Hurricane Electric Proto-41 tunnel endpoint update: "
#(C) 2010 Erik B. Andersen This script is licensed under the latest version of the
# AGPL published by the Free Software Foundation at http://www.gnu.org/licenses/ .
####Set these for each different site#########
pass="passwordhere"
user_id="a765b8e2f474667dcb56e08c5f1aa05b"
tunnel_id="97817"
####Past here doesn't need to be changed######
wget -4 "https://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b=AUTO&pass=$(echo -n "${pass}" | md5sum | grep -o -E "[0-9a-fA-F]{32}")&user_id=${user_id}&tunnel_id=${tunnel_id}" -O /dev/null -o /dev/null --no-check-certificate
echo " Done"

1
Какие усилия необходимо предпринять, чтобы правильно настроить такой туннель? Это соединение, конечно, основано на ключах, поэтому я использую ssh-import-id
Lekensteyn

Действительно, я хотел бы узнать больше об этой уловке.
Rafał Cieślak

0

В течение многих лет я разрабатывал графический интерфейс для выполнения именно того, что запрашивает OP ... за исключением того, что для него требуется доступ по ssh к третьему серверу с публичным IP, как это предложил Павлос. Вы можете найти здесь пакеты Debian и инструкции:

http://pietrobattiston.it/reachme

Обратите внимание, что он (до сих пор) не может позаботиться о первоначальной конфигурации, а именно: вам нужно самостоятельно настроить ключи rsa для безпарольного соединения. После настройки «reachthem» позволяет увидеть, подключен ли «reachme», и открыть оболочку ssh / просмотреть файловую систему / просмотреть экран (экспериментально).

Очевидно, что вам не нужен третий компьютер, если ваш компьютер имеет публичный IP-адрес, как в ответе ændrük. Очевидно, что преимущество графического интерфейса пользователя состоит в том, что удаленному пользователю не нужно вводить какую-либо команду в терминале ... но часть этого преимущества теряется, если удаленный пользователь должен установить reachme. Так что я просто всегда устанавливаю и настраиваю reachme для всех, на кого устанавливаю Ubuntu.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.