J'ai un Raspberry Pi (RPi) et je lui connecte à distance en utilisant ssh. J'ai réussi à configurer correctement ssh de manière à pouvoir accéder au RPi à la fois depuis un réseau local et depuis Internet (en utilisant un port spécifique que j'ai ouvert sur mon routeur).
En supposant un nom d'utilisateur john
et un RPi nommé raspi
:
Accès LAN intérieur
ssh [email protected]
ssh john@raspi
ssh raspi
Accès LAN extérieur
ssh -p 1234 [email protected]
ssh -p 1234 12.345.67.89
Mais comment faire simplement ssh raspi
depuis l'extérieur de mon réseau local?. Existe-t-il un moyen de configurer raspi pour pointer vers deux adresses IP, une dans un LAN et une sur Internet?
Ce que je veux essentiellement, c'est accéder à mon RPi d'une manière unique, que je sois à la maison ou au travail.
ssh
ip
openssh
port-forwarding
Aeronaelius
la source
la source
Réponses:
En regardant de plus près votre question, il semble que vous utilisez le même ordinateur à la fois à l'intérieur et à l'extérieur du LAN. J'ai révisé ma réponse en conséquence:
Dans votre
~/.ssh/config
, ajoutez:Ensuite, vous pouvez
ssh raspi-wan
depuis l'extérieur du LAN, oussh raspi-lan
depuis l'intérieur du LAN sans toucher aux serveurs DNS ou modifier/etc/hosts
pour tous les utilisateurs, ou même avoir besoin de faire quoi que ce soit en tant que root. Si vous voulez que le nomraspi
se résolve différemment selon l'endroit où vous vous trouvez, cela nécessitera probablement un peu de magie de script shell pour détecter votre réseau et agir en conséquence.la source
-wan
et-lan
postfix. Mon ssh n'a cependant pas aimé leUsername
champ (option de configuration incorrecte). Il fonctionne très bien sans cela.User john
pasUserName
. Je corrige ma réponse pour refléter cela, et une fois que vous avez ainsi défini votre configuration, vous pouvez omettre le nom d'utilisateur de lassh
ligne de commande.Ceci est parfaitement réalisable avec juste la configuration ssh, sans avoir à utiliser des alias séparés pour le lan et le wan ou créer des ports supplémentaires vers l'avant. (Mais vous avez naturellement besoin d'un moyen pour détecter si vous êtes dans votre réseau local ou non)
Dans
~/.ssh/config
, vous voudrez ajouter quelque chose comme ceci:Au lieu de,
am_i_outside_of_my_lan
vous voudrez placer une commande qui détermine si vous êtes à l'intérieur de votre réseau domestique ou non, et retourne avec 0 code de sortie si vous êtes en dehors, et autre chose sinon.La
host
condition est probablement explicite, mais laexec
condition mérite une explication: elle ne correspond que lorsque la commande donnée revient avec le code de sortie 0, c'est-à-dire. pas d'erreur.En d'autres termes, ce que cela fait, c'est que la
host raspi
partie restreint cette règle lorsque vous essayez de vous connecter à l'hôte raspi, et laexec "am_i_outside_my_lan"
limite davantage pour qu'elle ne s'applique que lorsque vous vous connectez à l'extérieur de votre réseau domestique. Donc, à l'intérieur de votre réseau domestique, ilssh user@raspi
fait exactement ce qu'il ferait normalement, mais en dehors de celui-ci, la règle correspond et il fait à la place l'équivalent dessh -p 1234 [email protected]
.Quant à quoi utiliser à la place
am_i_outside_of_my_lan
, cela dépend entièrement de votre configuration. Je suggère de placer les commandes dans un script séparé au lieu d'essayer de l'écrire en ligne, car la citation semble être un peu difficile à bien faire.Personnellement, j'ai utilisé le script Python suivant pour détecter si je suis à l'intérieur de mon propre réseau: (puisque mon nom de domaine se résout en une adresse IP locale à l'intérieur de mon propre réseau)
Si vous n'avez pas une configuration similaire, vous devrez peut-être faire autre chose. (Par exemple, vous pouvez regarder le nom du réseau sans fil auquel vous êtes connecté, ou même interroger un service what-is-my-ip pour obtenir l'ip externe du réseau auquel vous êtes connecté)
la source
Sur votre ordinateur (le Connect- ing un), vous pouvez définir un nom d' hôte
12.345.67.89
. Ouvrez votre/etc/hosts
fichier et définissez une entrée DNS:Votre machine transformera ensuite "raspi" en "12.345.67.89" dans le cadre d'un processus de résolution DNS local. Si vous utilisez plusieurs machines, le changement doit être effectué sur chacune d'elles. Le problème est: il nécessite un accès root pour modifier
/etc/hosts
, et vous pourriez ne pas l'avoir partout.Si vous voulez que "raspi" soit reconnu automatiquement de n'importe où, alors désolé: pas possible. Cela nécessiterait l'enregistrement de "raspi" comme nom de domaine, ce qui ne peut pas se produire car "raspi" n'a pas de TLD, et ne dépendrait d'aucun serveur racine DNS. Cependant, vous pouvez enregistrer un nom de domaine (disons
cfbaptista.me
, et le pointer vers votre adresse IP WAN. Avec une redirection de port, vous pourrez accéder à votre Raspberry Pi avec:(encore, c'est dépenser de l'argent pour presque rien ...)
Concernant la
user@
pièce, cela dépend de votre identifiant sur les différentes machines. Si vous avez le même nom sur la machine connectée et sur la machine distante , alors pas besoin de le préciser. Sinon, vous devez spécifier qui vous êtes sur la machine distante .la source
Objectif:
ssh raspi
fonctionner à l'intérieur du LAN et sur Internet public.Pour ce faire, vous devez vous assurer que le nom résout l'IP interne sur le LAN et l'IP publique de l'extérieur.
Tout d'abord, vous devez obtenir un nom de domaine tel que
raspi.yourdomain.com
. Consultez http://freedns.afraid.org/ pour les domaines gratuits à utiliser pour les loisirs. Pointez le domaine vers votre IP publiquePour le LAN, je recommande d'exécuter DNSMasq. Le micrologiciel ouvert DD-WRT s'intègre étroitement à DNSMasq, l'utilisant pour DHCP et DNS. Il vous suffit de lui indiquer votre domaine de recherche ("votredomaine.com") et il attribuera automatiquement les noms DNS en fonction du nom demandé par chaque client. Pour que cela fonctionne, le fichier / etc / hostname de raspi doit lire
raspi
.Une fois que cela est configuré, raspi.votredomaine.com devrait se résoudre en IP locale sur votre LAN (assurez-vous simplement que vous utilisez le DNS local sur toutes vos machines).
Maintenant, vous ne voulez probablement pas exposer le port 22 à l'Internet public, car vous obtiendrez une tonne de trafic de renifleur. Ainsi, votre routeur peut exposer raspi: 22 comme un autre port, par exemple 1234. Pour utiliser le même port sur les réseaux publics et internes, vous pouvez ajouter une règle de redirection de port à raspi. Sous Linux:
(remplacez eth0 par le nom de votre interface réseau comme indiqué par
ip link
ouifconfig
, et 1234 par votre port public)Maintenant, vous pouvez
ssh -p 1234 raspi.yourdomain.com
à la fois du public et du LAN.Vous pouvez ajouter une entrée à ~ / .ssh / config sur votre machine cliente pour la raccourcir
ssh raspi
, comme mentionné par @DopeGhoti.Si vous souhaitez exposer les ports SSH de machines supplémentaires sur la même IP publique, répétez simplement le processus avec un autre nom DNS et un autre port public. À votre santé!
la source
Voici une version succincte et fonctionnelle de la réponse d'Aleksi Torhamo utilisant curl pour récupérer votre adresse IP publique actuelle, puis en vérifiant si elle correspond à l'adresse IP publique de votre serveur (c'est-à-dire que vous êtes sur le même réseau local).
Dans votre
~/.ssh/config
annoncela source
ssh
que toutes les directives correspondantes seront traitées dans l'ordre, donc en théorie, vous devriez pouvoir faire quelque chose commeMatch host raspi / User john / HostName 192.168.2.7
suiviMatch host raspi exec "[[ $(curl -s ipinfo.io/ip) != '12.345.67.89' ]]" / HostName 12.345.67.89 / Port 1234
et obtenir le même effet avec une seulecurl
invocation, laissant l'== '12.345.67.89'
hypothèse être prise en compte par l'échec de la deuxièmeMatch
règleexec
.Match
est le même ou également spécifié dans le second - si vous avez spécifié un non standardPort xxxx
dans le premierMatch
et que vous vouliez utiliser le port standard dans le secondMatch
, vous devez le remplacer explicitement par unPort 22
afin qu'il ne continue pas à utiliser le portxxxx
.)En supposant que votre machine possède IP 192.168.1. * Lorsqu'elle est connectée à votre réseau local, vous pouvez y parvenir avec la configuration suivante
~/.ssh/config
afin que vous puissiez toujours utiliser la même commande (justessh raspi
) pour vous connecter:la source
Cette solution suppose que votre réseau domestique possède un seul routeur, ce qui, je crois, est le cas le plus courant.
Ajoutez à votre
~/.ssh/config
la source