Comment puis-je aider quelqu'un (comme mamie) sur SSH qui se trouve derrière un routeur NAT?

14

Pour aider les autres rapidement, SSH est très utile, surtout combiné avec GNU Screen. Il est courant que les utilisateurs soient derrière un routeur NAT. Même si l'utilisateur peut configurer le routeur, il faut un certain temps pour se souvenir du mot de passe, trouver les bonnes options, etc.

Alors, quelle est la façon la plus simple d'aider les autres via SSH s'ils sont derrière un routeur NAT?

Je dis actuellement aux gens d' ouvrir un terminal, d' exécuter la commande ci-dessous et de me transmettre leur IP à partir d'un site comme http://ip.appspot.com/ :

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

Évidemment, cela ne fonctionnera pas s'ils sont derrière un routeur NAT ou si un pare-feu personnel est configuré. Alors, y a-t-il quelque chose comme:

sshd --accept-help-from lekensteyn

Je ne cherche pas d'alternatives comme Teamviewer, juste un shell comme SSH. Il devrait également être open-source.

Lekensteyn
la source

Réponses:

13

Si votre propre ordinateur peut accepter les connexions SSH, il existe un moyen d'utiliser la technique à laquelle Pavlos G. a lié sans ordinateur supplémentaire.

Vous avez d'abord besoin d'un utilisateur défavorisé * que votre ami se connectera en tant que:

sudo adduser reverse --shell /bin/false

Dites à votre ami de démarrer le tunnel:

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

Ensuite, sur votre propre ordinateur ( lekensteyns-server), démarrez la connexion inverse:

ssh -p 62222 localhost

* Je ne connais pas suffisamment la sécurité pour pouvoir vous conseiller sur la création d'un utilisateur convenablement défavorisé. C'est probablement quelque chose qui devrait être traité dans une question distincte.

ændrük
la source
3
Semble prometteur, j'ai posé une nouvelle question sur cette partie utilisateur restreinte
Lekensteyn
2

En fonction de vos besoins spécifiques, je voudrais probablement:

  1. Demandez-leur de me dire le mot de passe du routeur
  2. Connexion et configuration de la redirection de port pour le port 22 uniquement
  3. Connectez-vous via SSH (ou tunneling SSH si vous avez besoin d'ouvrir des ports supplémentaires) et faites le travail.

J'ai également oublié que vous pouvez essayer le tunnel ssh inverse , bien que cette solution nécessite techniquement un ordinateur de plus - milieu - pour fonctionner.

Plus d'informations peuvent être trouvées ici

Pavlos G.
la source
1) ne va probablement pas fonctionner car l'accès au routeur est souvent interdit au public.
Lekensteyn
2

Je mets généralement en place un tunnel IPv6 (à partir de sixxs.net ou he.net) s'ils n'ont pas déjà IPv6 et de cette façon, l'ordinateur a une adresse statique et je n'ai pas à jouer avec NAT. J'aime également mettre en place une authentification basée sur les clés (alors ils n'ont pas à vous dire leur mot de passe).

Sixxs a son propre client que vous utilisez. Il fonctionne derrière presque tous les NAT et se met à jour automatiquement lorsque l'adresse IPv4 change. Ils ont des instructions sur la façon de le configurer et il est conditionné pour Ubuntu.

Hurricane Electric utilise un tunnel où les packages IPv6 sont envoyés en tant que charge utile d'un paquet IPv4. Contrairement à Sixxs, aucun TCP / UDP n'est utilisé. Cela signifie que le NAT que vous êtes derrière doit prendre en charge le PROTOCOLE 41 de transfert (pas le port) et qu'un seul ordinateur derrière le NAT peut l'utiliser. Le logiciel pour utiliser un tunnel comme celui-ci est intégré à Ubuntu.

Pour HE, j'utilise quelque chose comme ça dans /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

L'autre chose que vous devez faire est de mettre à jour votre point de terminaison de tunnel. Puisque vous ne savez pas quand l'IP externe change, vous devrez simplement essayer de mettre à jour le point de terminaison toutes les quelques minutes. Vous pouvez utiliser quelque chose comme ça et l'exécuter à partir de 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"
Azendale
la source
1
Quels efforts doivent être déployés pour installer correctement un tel tunnel? Cette connexion est bien sûr basée sur les clés, c'est pourquoi j'utilise ssh-import-id
Lekensteyn
En effet, j'aimerais en savoir plus sur cette astuce.
Rafał Cieślak
0

Au fil des ans, j'ai développé une interface graphique pour faire exactement ce que l'OP demande ... sauf qu'il nécessite un accès ssh à un troisième serveur avec IP publique, comme suggéré par Pavlos. Vous pouvez trouver ici les paquets debian et les instructions:

http://pietrobattiston.it/reachme

Notez qu'il n'est pas (encore) en mesure de prendre en charge la configuration initiale - à savoir, vous devez configurer vous-même les clés rsa pour une connexion sans mot de passe. Une fois configuré, "reachthem" vous permet de voir si "reachme" est connecté, et d'ouvrir un shell ssh / parcourir le système de fichiers / afficher l'écran (expérimental).

De toute évidence, vous n'avez pas besoin d'un troisième ordinateur si votre ordinateur lui-même a une adresse IP publique, comme dans la réponse de ændrük. Et clairement, l'avantage de l'interface graphique est que l'utilisateur distant n'a pas à entrer de commande dans un terminal ... mais une partie de cet avantage est perdue si l'utilisateur distant doit installer reachme. Donc, j'installe et configure toujours toujours reachme pour tous ceux sur lesquels j'installe Ubuntu.

Pietro Battiston
la source