Je voudrais accéder au port ssh de mon hôte Linux Office depuis mon domicile. Malheureusement, l'hôte est situé derrière un routeur NAT. Ainsi, l'adresse IP n'est pas accessible au public. Il y a cependant un accès à un autre hôte Internet (serveur) qui n'est malheureusement qu'un accès non root. Après un certain temps de recherche, je ne trouve pas de solution appropriée.
Configuration suivante:
- Office PC (linux, accès root) derrière NAT (IP non public) mais accès complet à Internet.
- Serveur PC (Linux, pas d'accès root) IP statique et publique et accès Internet complet.
- PC domestique (linux, accès root) derrière NAT (IP non public) mais accès complet à Internet.
Connexions possibles: PC de bureau -> Serveur <- PC domestique
Impossible: Office PC <-X- Server -X-> Home PC
Ni le PC domestique, ni le serveur ne peuvent initier l'accès au PC Office. Mais le PC de bureau et le PC domestique peuvent établir des connexions au serveur.
Tunnel SSH inverse impossible: j'ai essayé une méthode appelée tunnel ssh inverse. Malheureusement, cela nécessite que GatewayPorts sur le serveur soit défini sur "oui" dans / etc / ssh / sshd_config, où je n'ai pas d'accès root.
En principe, il devrait être possible:
0) Sur le serveur, je lance un programme d'espace utilisateur qui écoute sur 2 ports (1 entrant, 1 sortant)
1) Sur mon PC de bureau, j'exécute un autre programme qui maintient une connexion TCP ouverte au port sortant sur le serveur.
2) De chez moi, je me connecte au port entrant du serveur.
Il devrait y avoir une solution standard pour cela.
Quelle est la solution la plus rapide et la plus propre pour résoudre ce problème?
Franc
Réponses:
Plus tard:
Ce que vous pouvez faire est le suivant: à l'étape 1, transférez un port distant du PC de bureau au serveur (
12345
est utilisé comme exemple, tout port> 1024 devrait le faire). La connexion à 12345 sur le serveur devrait vous connecter au port 22 sur officepc.À l'étape 2, transférez le port 23456 de votre ordinateur personnel vers 12345 sur le serveur (d'où il est transféré à officepc: 22, comme configuré à l'étape 1)
À l'étape 3, vous vous connectez au port local 23456 avec la connexion de votre ordinateur de bureau . Ceci est transmis à l'étape 2 au port 12345 de votre serveur et à l'étape 1 à votre PC de bureau.
Notez que j'utilise autossh pour les transferts, car c'est un wrapper ssh qui reconnecte automatiquement le tunnel s'il est déconnecté; cependant ssh normal fonctionnerait aussi bien, tant que la connexion ne tombe pas.
Il existe une vulnérabilité possible: toute personne qui peut se connecter à localhost: 12345 sur serverpc peut maintenant se connecter à officepc: 22 et essayer de le pirater. (Notez que si vous utilisez un serveur SSH, vous devez de toute façon le sécuriser au-dessus des protections de base qui sont activées par défaut; je recommande au moins de désactiver la connexion root et la désactivation de l'authentification par mot de passe - voir par exemple ceci )
Edit : j'ai vérifié cela avec la même config, et ça marche.
GatewayPorts no
affecte uniquement les ports ouverts sur le monde dans son ensemble, pas les tunnels locaux. Voici les ports redirigés:Donc, en ce qui concerne la pile réseau, c'est tout le trafic local sur les interfaces de bouclage respectives (plus les connexions ssh à serverpc); par conséquent,
GatewayPorts
n'est pas vérifié du tout.Il y a cependant la directive
AllowTcpForwarding
: si c'est le casno
, cette configuration échouera car aucun transfert n'est autorisé du tout, pas même à travers l'interface de bouclage.Mises en garde :
si vous utilisez autossh et ssh récent, vous voudrez peut-être utiliser ssh
ServerAliveInterval
etServerAliveCountMax
pour garder le tunnel en place. Autossh a une vérification intégrée, mais apparemment, il y a des problèmes sur Fedora.-M0
le désactive et-oServerAliveInterval=20 -oServerAliveCountMax=3
vérifie si la connexion est active - essaie toutes les 20 secondes, s'il échoue 3 fois de suite, arrête ssh (et autossh en crée une nouvelle):il peut être utile de redémarrer le tunnel ssh en cas d'échec du transfert, en utilisant
-oExitOnForwardFailure=yes
- si le port est déjà lié, vous pouvez obtenir une connexion SSH fonctionnelle, mais pas de tunnel transféré.il
~/.ssh/config
est conseillé d' utiliser les options (et les ports), sinon les lignes de commande deviennent trop verbeuses. Par exemple:Ensuite, vous pouvez utiliser uniquement l'alias du serveur:
la source
GatewayPorts no
restreint les ports ouverts pour qu'ils ne soient accessibles que sur l'interface de bouclage; notez qu'à l'étape 2 vous transférez sur l'interface de bouclage (en fait, les deux vers l'avant sont "localhost seulement"), donc cela pourrait fonctionner (AllowTcpForwarding no
dans la configuration sshd, cela casserait cela).GatewayPorts no
; modifié la réponse. Notez qu'il existe d'autres directives (telles quePermitOpen
etAllowTcpForwarding
) qui peuvent casser cette configuration: manpagez.com/man/5/sshd_configSi vous pouvez ssh vers le serveur interne depuis votre domicile et du serveur interne vers votre machine Linux de bureau, vous pouvez utiliser le ssh
ProxyCommand
pour rebondir silencieusement via le serveur vers la machine interne vianc
(netcat)Ensuite, vous venez
ssh user@internalpc
et vous êtes silencieusement transféré via la machine serveur, aucune ouverture de ports ou de tunnels requise à chaque extrémité.la source
Installez Robo-TiTO sur l'ordinateur auquel vous souhaitez accéder à distance à SSH.
Les instructions d'installation suivantes sont obsolètes, car le site a été déplacé. La nouvelle URL est https://github.com/formigarafa/robotito
la source
CLIENT_PASSPHRASE = "logmein"
, en texte clair . C'est littéralement une sécurité zéro - vous faites un trou de la taille d'un camion pour que n'importe qui puisse y entrer. Contrairement à l'authentification par clé publique SSH: je m'authentifie sur un canal sécurisé , en utilisant des informations d'identification qui ne traversent jamais le fil. Qui garde son ordinateur en sécurité maintenant?La solution de Piskvor fonctionne et est agréable. Cependant, il garde les terminaux ouverts et les coquilles de connexion suspendues. Pas très cool.
J'ai toujours utilisé ce petit script que j'ai écrit pour me connecter à un serveur et le garder connecté en l'exécutant dans cron:
Je parie que nous pourrions corriger la solution de Piskvor en utilisant l'autossh plus élégant à côté peut-être d'un écran détaché ou utiliser les arguments -NT ssh pour simplement maintenir la connexion en arrière-plan.
la source
homepc
ordinateur).Pour moi, il semble que, au lieu d'un tunnel SSH, vous devriez essayer un VPN: le type qui fonctionne en utilisant un serveur à l'extérieur pour proxy, comme Hamachi . Il existe d'autres logiciels gratuits comme celui-ci, mais Hamachi est mon préféré.
la source
5.0.0.0/8
réseau a réellement des adresses IPv4 publiques attribuées, Hamachi est en difficulté (si Hamachi est en cours d'exécution, vous ne pouvez pas accéder à une partie quelque peu aléatoire d'Internet). De plus, Hamachi n'est plus gratuit.