Forum Linux.debian/ubuntu Alternative Reverse SSH

Posté par  . Licence CC By‑SA.
1
13
mai
2014

Bonjour,
J'ai découvert ce matin le tunneling SSH et en particulier le reverse ssh. J'ai donc fait mes tests et tout fonctionnait. Malheureusement lorsque j'ai commencé le déploiement sur mes différentes machines, je me suis aperçu que le port ssh ne pouvait être le même.

Pour expliquer exactement ce que j'ai fait, j'ai une centaine de machines debian en france cachées derrière des NAT, firewall. J'ai créé un identifiant par machine puis chaque machine crée un tunnel :
ssh -R 8000:localhost:22 id_machine_1@monserveur pour ma machine 1 et
ssh -R 8000:localhost:22 id_machine_2@monserveur pour ma machine 2. Le souci est que la deuxième machine ne parvient pas à initialiser le tunnel du fait qu'elle utilise le même port que la machine 1.

J'ai souhaité procéder ainsi car je n'avais pas envie de gérer une table de ports associés à mes identifiants de machine. De cette manière un simple ssh -p8000 id_machine_1@localhost suffit pour se connecter.
Au final j'aimerai avoir une solution de connexion ssh à mes différentes machines sans avoir à paramétrer tous les routeurs auxquels elles sont connectées un peu comme le fait teamviewer mais sans accès à l'interface graphique.

Je cherche donc une solution pour éviter ce problème voire même une alternative autre que le reverse ssh.

Merci

  • # Conflit de port

    Posté par  (site web personnel) . Évalué à 2.

    Salut,

    Bah oui, tu ne peux pas faire ce que tu évoques…

    Tu dis à SSH de rediriger le port 8000 de "monserveur" vers le port 22 de la machine 1.
    Ensuite tu dis à SSH de rediriger le port 8000 de "monserveur" vers le port 22 de la machine 2.
    … mais le port 8000 est déjà redirigé.

    Imagine, si le port 8000 était redirigé vers les deux machines, comment choisirais-tu à laquelle te connecter, avec ton "ssh -p8000" ?

    Si tu veux utiliser ça, la seule possibilité c'est de prendre un port différent pour chaque machine…

    Je ne connais pas de méthode pour faire ça automagiquement.

    Cela dit, tu pourrais aussi utiliser un fichier de configuration SSH pour simplifier ta connexion, et c'est lui qui servirait de "table des ports"…

    • [^] # Re: Conflit de port

      Posté par  . Évalué à -1.

      Je pensais qu'en mettant le nom d'utilisateur il allait savoir quel tunnel utiliser. N'existe - t - il pas des solutions (package deb) qui serait en mesure de faire ce que je veux ?

      • [^] # Re: Conflit de port

        Posté par  . Évalué à 4.

        tu as le choix des ports depuis 1025 jusqu'a 65535

        tu peux donc faire port 8000 pour la premiere machine, 8001 pour la deuxieme, 8002 pour la troisieme…

  • # vpn / openvpn / ipsec

    Posté par  (site web personnel) . Évalué à 2.

    A mettre en place ?

    Système - Réseau - Sécurité Open Source - Ouvert à de nouvelles opportunités

  • # Solution

    Posté par  . Évalué à 0. Dernière modification le 14 mai 2014 à 20:49.

    J'ai finalement trouvé ce que je voulais. Sur chaque machine client je me sert de autossh : un programme permettant de relancer le tunnel en cas de perte de connexion :
    autossh -M 0 -q -N -oServerAliveInterval=120 -oServerAliveCountMax=3 -R 0:localhost:22 id_machine_n@mon_serveur

    Ensuite sur le serveur, j'ai fait un script auquel je renseigne mon identifiant machine et le tour est joué.
    Voici mon script :

    #!/bin/bash
    if [ $# -ne 1 ]; then
        echo "Vous devez renseigner l'identifiant de la machine en parametre"
        exit
    fi
    machine=$1
    listPorts=$(lsof -i -n | grep $machine | grep IPv4 | grep "\*:" | awk {'print $9'} | cut -d ':' -f2)
    lastPort=$(lsof -i -n | grep $machine | grep IPv4 | grep "\*:" | awk {'print $9'} | cut -d ':' -f2 | tail -1)
    numberPorts=$(lsof -i -n | grep $machine | grep IPv4 | grep "\*:" | awk {'print $9'} | cut -d ':' -f2 | wc -l)
    if [ $numberPorts -lt 1 ]; then
        echo "Aucun tunnel trouve, la connexion n'est pas etablie"
        exit
    fi
    echo "Liste des ports disponibles : "
    echo $listPorts
    echo "Connexion a la machine $machine sur le port $lastPort"
    ssh -p $lastPort $machine@localhost

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.