Connexion au serveur Ubuntu via SSH en externe


25

J'ai récemment installé Ubuntu Server 12.04 (Precise Pangolin) et j'ai l'intention de l'utiliser principalement comme serveur de fichiers. Je suis complètement nouveau sur Linux, c'est donc une courbe d'apprentissage assez importante. Hier, j'ai pu configurer PuTTY sur ma machine Windows 7 à l'aide d'une paire de clés SSH afin de pouvoir administrer Ubuntu Server à partir de mon bureau. Cela fonctionne très bien à condition que les deux machines soient sur le même réseau.

Dans le cas de mon ordinateur portable ( MacBook Air ), il se peut qu'il ne soit pas toujours sur le même réseau. Est-il possible de pouvoir se connecter au serveur Ubuntu depuis mon ordinateur portable via SSH lorsqu'il est sur un autre réseau?

J'ai installé le démon avahi pour que le nom d'hôte du serveur soit diffusé sur le LAN et configuré le routeur afin qu'il attribue toujours la même adresse IP au serveur. En dehors de cela, la seule chose que j'ai installée sur le serveur est OpenSSH où j'ai désactivé l'authentification par mot de passe afin que vous ne puissiez vous connecter qu'en utilisant une paire de clés.

J'ai pensé que je pourrais faire quelque chose comme ça depuis le terminal de mon ordinateur portable:

ssh my.external.ip.address user@hostname.local

Lorsque j'essaie cette commande, j'obtiens l'erreur:

ssh: connectez-vous à l'hôte my.external.ip.address port 22: opération expirée

J'ai aussi essayé

ssh my.external.ip.address user@servers.local.ip.address

et j'obtiens le même message d'erreur qu'avant. Donc, cela devrait vous donner une idée de ce que j'essaie de faire, mais est-ce possible, et si c'est le cas, comment dois-je le faire?

En supposant que je puisse établir une connexion externe via ssh depuis mon ordinateur portable, il est possible que mon FAI change mon adresse IP externe, ce qui romprait la connexion externe. Je voudrais pouvoir me connecter de manière robuste, c'est-à-dire que si mon FAI change l'adresse IP externe, je serais toujours en mesure de me connecter à distance au serveur sans avoir à savoir quelle est la nouvelle adresse IP externe.

Réponses:


23

Tout d'abord, la commande correcte est: ssh user@my.external.ip.address

Et le routeur doit être configuré pour transmettre le port SSH 22 à l'adresse IP locale de votre serveur.

Pour un débogage supplémentaire:

1) Vérifiez que le port 22 (SSH) est ouvert sur votre serveur et sur le routeur (redirection de port).

2) Vérifiez que le serveur SSH fonctionne sur votre serveur

3) Utilisez ping, ssh -vpendant la connexion et regardez /var/log/auth.logpour déboguer tout autre problème de connexion.

1) Sur votre routeur: suivez les instructions spécifiques au routeur

Sur votre serveur: sudo ufw status(sauf si vous utilisez un autre utilitaire de configuration de pare-feu) ou sudo iptables -L(méthode générale, mais sortie complexe)

Pour ouvrir le port 22: sudo ufw allow 22

cf https://help.ubuntu.com/12.04/serverguide/firewall.html

2) Vérifiez qu'il est installé: dpkg -l openssh-server

Vérifiez qu'il fonctionne: service ssh statusoups aux | grep sshd

3) Sur le client qui se connecte:

  • ping my.external.ip.address
  • ssh -v user@my.external.ip.address

Sur le serveur:

  • sudo less /var/log/auth.log

Vous pouvez également vérifier les journaux du routeur si nécessaire.

Voici un scanner de port en ligne: https://www.grc.com/x/ne.dll?bh0bkyd2

Je pense que vous pouvez utiliser des outils comme nmap ou autre, mais je ne les connais pas encore très bien.

Gérer une adresse IP externe changeante:

1) Obtenez un compte dynDNS ou similaire: http://dyn.com/dns/

Listes de fournisseurs DNS dynamiques:

2) Une autre solution consiste à mettre en place une tâche crontab, qui vous envoie régulièrement votre adresse IP externe par la poste ou la met dans un service de stockage en ligne comme dropbox.

Voici un script utilisé par un de mes amis:

    #!/bin/bash
    # Bash script to get the external IP address
    MYWANIP=$(curl http://mire.ipadsl.net | sed -nr -e 's|^.*<span class="ip">([0-9.]+)</span>.*$|\1| p')
    echo "My IP address is: $MYWANIP"

    IPold=$(cat /home/USER/Dropbox/test.txt)
    echo "Previous IP Address: $IPold"

    if [[ $IPold != $MYWANIP ]] ;
    then
      echo "New IP"
      rm /home/USER/Dropbox/test.txt
      echo $MYWANIP >> /home/USER/Dropbox/test.txt;
      echo $MYWANIP;
    else
      echo "Same IP";
    fi

    # example crontab entry:
    ## m h  dom mon dow   command
    ## */10 * * * * /home/USER/Dropbox/test_ip.sh

Redirection de port du routeur:

1) Tout d'abord, déterminez l'adresse IP locale de votre routeur en exécutant:

ip route | grep default

C'est généralement quelque chose comme 192.168.xx

Autres moyens et autres solutions OS:

2) En utilisant n'importe quel ordinateur connecté localement au routeur, accédez à l'adresse IP trouvée précédemment, c'est-à-dire via http://192.168.1.1 par exemple. Cela devrait faire apparaître l'interface de configuration du routeur.

3) Les étapes suivantes varient en fonction de votre routeur. Voici comment cela se fait sur un routeur avec OpenWRT par exemple:

https://newspaint.wordpress.com/2012/08/26/how-to-add-a-port-forward-using-the-web-interface-on-openwrt-10-03-1/


Merci pour cela, je vais parcourir les suggestions maintenant.
Aesir

Ok, tout ce que j'avais à faire était de transférer le port 22 de mon routeur vers le serveur et cela fonctionne, merci beaucoup. Existe-t-il un moyen de résoudre la deuxième partie de ma question concernant le fait que mon adresse IP externe pourrait changer? - Je viens de voir votre montage, lira maintenant.
Aesir

Pourriez-vous expliquer comment puis-je transférer le port 22 de mon routeur vers le serveur? Qu'est-ce que ça veut dire? Merci!
xxx222

Cela dépend de votre routeur, mais il devrait généralement y avoir une page de redirection de port ou de paramètres de pare-feu quelque part. Voici comment le faire sur un routeur avec OpenWRT: newspaint.wordpress.com/2012/08/26/… La plupart des routeurs peuvent être configurés en allant à 192.168.1.1 ou à une adresse similaire 192.168.xx à partir de votre navigateur si vous êtes sur le même réseau que le routeur.
KIAaze

3

Par défaut dans Ubuntu (Desktop), SSH n'est pas installé.

Vous pouvez l'installer par la commande suivante dans Terminal:

sudo apt-get install openssh-server

Il doit installer et démarrer le service immédiatement.


2
+1. Cela a très bien fonctionné quand je l'ai essayé. J'ai pu accéder à la machine Ubuntu juste après avoir exécuté cette commande (pour Ubuntu 14.04 (Trusty Tahr), édition de bureau 64 bits).
Peter Mortensen
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.