Comment attribuer un nom d'hôte au tunnel SSH

16

J'utilise ssh [email protected] -g -L 4321:localhost:28017 pour établir un tunnel entre mon MacBook et mon serveur dédié chez mon hébergeur. Ça marche bien. Maintenant, je veux accéder à plusieurs sites d'administration sur le serveur distant (une page d'état MongoDB, une page RabbitMQ, etc., tous sur des ports différents). Tous sont liés à 127.0.0.1 sur la machine distante. Comment puis-je modifier cette commande ssh pour

  • attribuer un nom au tunnel et utiliser par exemple "my.tunnel.name" dans mon navigateur
  • pouvoir définir le port distant dans mon navigateur; Je souhaite me connecter à my.tunnel.name:port, afin de pouvoir appeler les différents sites

Est-ce possible avec ssh? J'ai lu les pages de manuel et fait des recherches sur Google depuis deux jours maintenant, mais cela ne semble pas fonctionner.

--edit 2012-06-01 23: 36-- Grâce aux réponses et commentaires fournis, la redirection de port fonctionne maintenant en utilisant

ssh [email protected] -D 4321

Je peux configurer cela comme un proxy dans mon navigateur et le navigateur traitera toute demande à localhost: anyport comme si elle avait été faite sur le serveur distant. L'utilisation d'un nom n'est désormais plus nécessaire, car le navigateur est réservé aux sites de serveurs distants.

brains_at_work
la source

Réponses:

12

Ce que vous décrivez n'est pas possible. Mais il y a encore de bonnes nouvelles:

Cependant, il est possible d'établir une connexion dynamique avec le serveur SSH. Cela ouvrira un port sur votre ordinateur local vers lequel vous pouvez pointer le paramètre Proxy de votre navigateur et vous permettre d'utiliser le tunnel comme serveur proxy. Mais vous devez taper un nom d'hôte / ip et un port dans le navigateur comme si le navigateur s'exécutait sur la machine sur laquelle le serveur SSH est allumé.

La commande ressemble à ceci: ssh [email protected] -D 1234
Pointez ensuite le proxy de votre navigateur vers localhost:1234.

Donc, si vous créez un tunnel vers le serveur A et souhaitez vous connecter au serveur B, vous tapez dans votre navigateur l'adresse que vous saisissez dans un navigateur fonctionnant sur le serveur A. Si un navigateur fonctionnant sur le serveur A ne peut pas se connecter au serveur B (si le sur le serveur B n'écoute que sur 127.0.0.1), vous ne pouvez toujours pas vous connecter. Il semble que vous n'ayez qu'un seul serveur, mais je voulais être sûr que c'était clair.

Si vous n'avez qu'un seul serveur, vous y tunnelez avec la connexion dynamique, définissez votre proxy. Vous pourrez alors taper "localhost: 1234" (par exemple) dans le navigateur et il se connectera au service exécuté sur le serveur distant sur le port 1234.

Remarque sur la sécurité: ne jamais configurer un serveur sur lequel root peut SSH! Grave faille de sécurité. Créez un compte d'utilisateur normal (qui est autorisé à su ou sudo) et SSH en tant que cet utilisateur.

Chris S
la source
2
Vous utilisez -L 1234 (transfert de port local) alors que vous devriez utiliser -D 1234 (transfert de port dynamique). Et peut-être aussi éviter d'utiliser -g, -g signifie que les hôtes distants peuvent se connecter à votre transfert, ce qui n'est pas ce que vous voulez si vous le faites à partir de votre poste de travail.
Mattias Ahnberg
Merci, Chris. J'ai déjà essayé ça. Je ne peux pas utiliser la commande ssh avec juste un port spécifié. Il renvoie une erreur: "Mauvaise spécification de transfert local '1234'"
brains_at_work
@ matthias-ahnberg: Génial, ça a fait l'affaire. avec le transfert dynamique, je peux maintenant utiliser le port comme proxy et localhost: certains appels de port sont dirigés vers le serveur distant.
brains_at_work
@MattiasAhnberg Wow, quel brainfart. Merci pour la correction.
Chris S
J'ai suivi ce processus mais j'ai obtenu l'erreur "La connexion a été réinitialisée" dans Firefox.
rivu
23

Vous pouvez attribuer un nom en utilisant le fait que votre adaptateur de bouclage répondra à n'importe quelle adresse du réseau 127.0.0.0/8.

Ainsi, au lieu de vous lier au port 4321, vous pouvez vous lier à 127.1.2.3:4321. Ensuite, configurez simplement une entrée d'hôte qui mappe un nom à l'adresse de bouclage que vous avez utilisée pour que foo.bar mappe 127.1.2.3.

Dans ma configuration SSH sur mon poste de travail administrateur, j'ai de nombreux tunnels configurés pour qu'ils se lient à une adresse dans la plage de bouclage, et j'ai des entrées dans mon fichier hôte, donc j'ouvre de nombreux tunnels en parallèle en utilisant le même port et je les distingue via Nom.

Donc, si vous vous connectez comme ça

ssh [email protected] -g -L 127.1.2.3:4321:localhost:28017

Et votre fichier d'hôtes a une ligne comme celle-ci.

127.1.2.3 my.tunnel.name

Ensuite, vous devriez pouvoir vous connecter à my.tunnel.name:4321 depuis votre ordinateur local.

Si vous disposez d'un espace d'adressage IP supplémentaire sur le réseau auquel votre client ssh est connecté, vous pouvez même attribuer une adresse secondaire à votre interface Ethernet et utiliser l'une de vos adresses IP réelles, puis configurer des entrées dans votre DNS si vous souhaitez que d'autres systèmes puissent pour utiliser votre tunnel SSH.

L'option -L -L [bind_address:]port:host:hostportvous permet d'utiliser n'importe quelle adresse IP valide sur le système local pour s'y connecter. Vous devez également inclure l' -goption si vous souhaitez que d'autres hôtes puissent se connecter via votre tunnel ssh.

Zoredache
la source
J'ai dû ajouter les ip à mon loopback dans osx. ifconfig l0 alias 127.0.1.1 255.255.255.0sinon super astuce!
devians
1
Si vous ne voulez pas qu'un shell soit créé, exécutez -Nà la fin de la commande. De cette façon, il est plus facile de se rappeler que c'est un tunnel, pas n'importe quelle connexion SSH.
mlissner
Lors de l'utilisation, 127.1.2.3je devais le faire sur mon macbook:, ifconfig lo0 alias 127.1.2.3 255.255.255.0qui s'ajoute 127.1.2.3comme nouvelle adresse sur l'interface lo0.
Donn Lee
5

Créez une redirection de port dynamique au niveau de l'application (socks proxy essentiellement) avec votre tunnel SSH, puis pointez vos applications via celui-ci. Pour créer un tunnel dynamique, connectez-vous comme suit:

ssh [email protected] -D 127.0.0.1:31337

Configurez ensuite votre application pour l'utiliser comme proxy SOCKSv5.

Si vous voulez un nom d'hôte lié à cela, ajoutez simplement des /etc/hostsentrées qui pointent vers 127.0.0.1, mais une façon plus jolie pourrait être d'ajouter 127.0.0.2 pour le premier tunnel, et une entrée d'hôtes pour celui-ci, 127.0.0.3 pour le second tunnel et une entrée d'hôte distincte pour celui-ci, etc. Si vous ajoutez des alias pour 127.0.0.1, parfois cet alias apparaîtra dans d'autres recherches de commandes de localhost, ce qui peut être déroutant!

Pour l'utiliser en douceur dans un navigateur Web, vous pouvez utiliser un module complémentaire de proxy, par exemple, je préfère le navigateur Web Chrome et pour celui-ci, j'utilise un module complémentaire appelé Proxy Switchy!. Vous pouvez le télécharger ici:
https://chrome.google.com/webstore/detail/caehdcpeofiiigpdhbabniblemipncjj

Dans la configuration de cet addon, je peux définir plusieurs proxys séparés, puis lier des expressions régulières d'hôtes / URL pour utiliser certains proxies, de cette façon je serai toujours correctement redirigé via les bons tunnels sans avoir à basculer manuellement. Veuillez me faire savoir si vous avez besoin de précisions sur l'une des étapes!

Mattias Ahnberg
la source
Merci pour le conseil complémentaire. Étant donné que j'utilise également Chrome, je n'ai pas besoin de garder FireFox ouvert également.
brains_at_work