Est-il possible de transmettre ssh demandes qui arrivent sur un certain port à un autre ordinateur?

StackOverflow https://stackoverflow.com/questions/45230

  •  09-06-2019
  •  | 
  •  

Question

J'ai un petit réseau local.Une seule de ces machines est disponible pour le monde extérieur (ce qui n'est pas facilement modifiable).Je voudrais être en mesure de le configurer tels que ssh demandes qui ne viennent pas sur le port standard pour aller vers une autre machine.Est-ce possible?Si oui, comment?

Oh, et toutes ces machines sont en cours d'exécution soit Ubuntu ou mac OS X.

Était-ce utile?

La solution

Un autre chemin à faire serait d'utiliser le tunnel ssh (ce qui arrive sur le côté client).

Vous souhaitez faire une commande ssh comme ceci:

ssh -L 8022:myinsideserver:22 paul@myoutsideserver

Qui vous connecte à la machine qui est accessible de l'extérieur (myoutsideserver) et crée un tunnel à travers cette connexion ssh vers le port 22 (standard port ssh) sur le serveur qui n'est accessible qu'à partir de l'intérieur.

Vous devez alors faire une autre commande ssh comme ceci (en laissant le premier toujours connecté):

ssh -p 8022 paul@localhost

Que la connexion au port 8022 sur votre localhost seront ensuite acheminés par le biais de la première connexion ssh vous prendre plus de myinsideserver.

Il y a peut être quelque chose que vous avez à faire sur myoutsideserver pour permettre la redirection de port ssh.Je suis à la double vérification que maintenant.

Modifier

Hmmm.La page man de ssh dit ceci:**Seul le superutilisateur peut transférer les ports privilégiés.**

Ce genre de implique, pour moi, que de la première connexion ssh doit être en tant que root.Peut-être quelqu'un peut préciser qu'.

Il ressemble privilèges de super-utilisateur n'est pas nécessaire tant que le port transféré (dans ce cas, 8022) n'est-ce pas un port privilégié (22).Merci pour la clarification Mike Stone.

Autres conseils

(Dans cet exemple, je suis en supposant que le port 2222 ira à votre hôte interne.$externalip et $internalip sont les adresses ip ou les noms d'hôtes du visible et de l'intérieur de la machine, respectivement.)

Vous avez plusieurs options, en fonction de la façon permanente, vous voulez la transmission par proxy:

  • Une sorte de TCP proxy.Sur Linux, l'idée de base est que avant le paquet entrant est traité, vous voulez changer sa destination—c'est à direprerouting NAT de destination:

    iptables -t nat -A PREROUTING -p tcp -i eth0 -d $externalip --dport 2222 --sport 1024:65535 -j DNAT --to $internalip:22

  • À l'aide de SSH pour établir temporaire de la redirection de port.De là, vous avez deux options:

    • Proxy Transparent, où le client pense que votre visible de l'hôte (sur le port 2222) est un serveur SSH et ne se rend pas compte que c'est en passant par.Alors que vous en perdez le contrôle fin, vous obtenez le confort (surtout si vous voulez utiliser SSH pour transférer VNC ou X11 tout le chemin à l'intérieur de l'hôte).

      • À l'interne de la machine: ssh -g -R 2222:localhost:22 $externalip
      • Puis, à partir de l'extérieur: ssh -p 2222 $externalip

      Notez que le "interne" et "externe" des machines n'ont pas à être sur le même réseau local.Vous pouvez redirection de port sur tout le pourtour du monde de cette façon.

    • Forcer la connexion à l'extérieur de la machine en premier.C'est vrai "forwarding", pas "proxy";mais l'idée de base est ceci:Vous forcez les gens à se connecter à l'extérieur de la machine (donc vous permet de contrôler qui peut se connecter et quand, et vous obtenir les journaux de l'activité), et à partir de là, ils peuvent SSH à l'intérieur.Il sonne comme une corvée, mais si vous définir de simples scripts shell sur l'extérieur de la machine avec les noms de vos hôtes internes, couplé avec mot de passe-moins de paires de clés SSH ensuite, il est très facile pour un utilisateur de se connecter.Donc:

      • Sur l'extérieur de la machine, vous faites un simple script, /usr/local/bin/internalhost qui fonctionne tout simplement ssh $internalip
      • Du monde extérieur, les utilisateurs n': ssh $externalip internalhost et une fois qu'ils se connectent pour la première machine, ils sont immédiatement transmis par le biais de l'interne.

      Un autre avantage de cette approche est que les gens ne pas obtenir la clé de la gestion des problèmes, depuis l'exécution de deux SSH services sur une adresse IP fera le client SSH en colère.

Pour info, si vous voulez SSH à un serveur et que vous ne voulez pas vous soucier de touches, ce faire

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

J'ai un alias dans mon coquillage appelé "nossh", de sorte que je peux le faire nossh somehost et il va l'ignorer toutes les erreurs de clé.Il suffit de comprendre que vous êtes ignorant la sécurité de l'information lorsque vous faites cela, il y a donc un risque théorique.

Une grande partie de cette information est à partir d'un discours que j'ai prononcé au Barcamp de Bangkok tout à propos de fantaisie SSH astuces.Vous pouvez voir mes slides, mais je vous recommande l' version texte comme le S5 diapositives sont en quelque sorte de buggy.Consultez la section intitulée "de l'Avant Quoi que ce soit:Simple Port Forwarding" pour info.Il y a aussi des informations sur la création d'un proxy SOCKS5 avec OpenSSH.Oui, vous pouvez le faire.OpenSSH est génial comme ça.

(Enfin, si vous faites beaucoup de traversant dans le réseau interne, envisager de mettre en place un VPN.Il semble effrayant, mais OpenVPN est très simple et fonctionne sur tous les Systèmes d'exploitation.Je dirais que c'est trop juste pour SSH;mais une fois que vous commencez de redirection de port par le biais de votre port-vers l'avant pour obtenir VNC, HTTP, ou d'autres choses qui se sont produites;ou si vous avez beaucoup d'hôtes internes à s'inquiéter, il peut être plus simple et plus facile à gérer.)

@Mark Biek

J'allais le dire, mais vous me battre pour elle!De toute façon, je voulais juste ajouter qu'il y a aussi l'option-R:

ssh -R 8022:myinsideserver:22 paul@myoutsideserver

La différence est que la machine vous vous connectez à/de.Mon patron m'a montré ce truc il y a pas longtemps, et il est certainement très agréable de savoir...nous étions derrière un pare-feu et nécessaires pour donner l'accès externe à la machine...il a obtenu autour de lui par ssh -R à une autre machine qui n'était pas accessible...ensuite, les connexions à la machine ont été envoyées dans la machine derrière le pare-feu, vous devrez utiliser -R ou-L, sur la base sur la machine qui vous êtes et qui vous êtes ssh-ing.

Aussi, je suis sûr que vous êtes bien à l'utilisation régulière d'un utilisateur du port forwarding (dans ce cas, le port 8022) n'est pas inférieure à la gamme restreinte (qui, je pense, est de 1024, mais je peux me tromper), parce que ce sont "réservés" les ports.Il n'a pas d'importance qui vous transférez à un "restreint" port parce que le port n'est pas ouvert (la machine est simplement avoir du trafic envoyé à travers le tunnel, il n'a aucune connaissance du tunnel), la 8022 port EST ouvert et est donc limité en tant que tel.

EDIT:N'oubliez pas que le tunnel est ouvert uniquement tant que le ssh initial reste ouvert, donc si il arrive à expiration ou que vous quittez, le tunnel sera fermé.

Vous pouvez utiliser le Port Fowarding pour ce faire.Jetez un oeil ici:

http://portforward.com/help/portforwarding.htm

Il y a des instructions sur la façon de configurer votre routeur au port de l'avant demande sur cette page:

http://www.portforward.com/english/routers/port_forwarding/routerindex.htm

Dans Ubuntu, vous pouvez installer Firestarter et puis, il est Service fonctionnalité pour transférer le trafic SSH à partir d'un port non standard sur votre ordinateur avec un accès externe vers le port 22 sur la machine à l'intérieur de votre réseau.

Sur OS X, vous pouvez modifier les /etc/nat/natd.plist fichier pour activer le port fowarding.

Sans déconner avec les règles de pare-feu, vous pouvez mettre en place un ~/.ssh/config fichier.

Supposons 10.1.1.1 est "la porte d'entrée" du système et 10.1.1.2 est le "client" du système.

Host gateway
  Hostname 10.1.1.1 
  LocalForward 8022 10.1.1.2:22 

Host client
  Hostname localhost
  Port 8022

Vous pouvez ouvrir une connexion ssh pour "gateway" via:

ssh gateway

Dans un autre terminal, ouvrez une connexion avec le client.

ssh client
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top