Comprendre les tunnels SSH

15

J'ai un serveur Linux (Ubuntu) auquel j'ai un accès root uniquement via ssh (port 22). Sur ce serveur, il y a une base de données MySQL à l'écoute sur le port 3306. Est-il possible d'utiliser du mastic (sur ma machine) et du tunneling (sur la machine linux) pour créer un tunnel à partir d'un port local sur ma machine (disons 4000), vers le serveur linux sur le port 22 puis du serveur à lui-même sur le port 3306?

Muhammad Gelbana
la source

Réponses:

20

J'ai dessiné quelques croquis

La machine, où la commande ssh tunnel est tapée (ou dans votre cas: Putty avec tunneling est démarré) est appelée «votre hôte» .

tunnel ssh à partir du local


tunnel ssh à partir d'une télécommande

introduction

  1. local: -L Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.

    ssh -L sourcePort:forwardToHost:onPort connectToHostsignifie: connectez-vous avec ssh à connectToHostet transférez toutes les tentatives de connexion au port local sourcePort vers onPortsur la machine appelée forwardToHost, accessible depuis la connectToHostmachine.

  2. éloigné: -R Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side.

    ssh -R sourcePort:forwardToHost:onPort connectToHostsignifie: connectez-vous avec ssh à connectToHostet transférez toutes les tentatives de connexion au port distant sourcePort vers onPortsur la machine appelée forwardToHost, accessible depuis votre machine locale.

Votre exemple

La première image représente votre situation. La boîte bleue appelée your hostest votre machine Windows à partir de laquelle vous démarrez Putty sur votre serveur Ubuntu, appelée remotehostà mon image. Les connexions au port vert (dans votre numéro de port 4000) sont transmises au port rose MySQL 3306de la localhostmachine de votre serveur Ubuntu (c'est-à-dire le serveur Ubuntu lui-même).

Pour le configurer avec Putty

Démarrez Putty et entrez vos paramètres de connexion habituels (nom d'hôte ou adresse IP) Dans l'arborescence de gauche, accédez à

Connexion → SSH → Tunnels

et créez un nouveau tunnel local avec le port source 4000(123 dans l'image) et la destination localhost:3306(localhost: 456 dans l'image).

N'oubliez pas de cliquer sur Ajouter .

Revenez ensuite à la session et cliquez sur Enregistrer pour conserver vos paramètres pour la prochaine fois. Vous pouvez maintenant utiliser la connexion enregistrée pour vous connecter à votre serveur et après vous être connecté avec succès, chaque fois que vous vous connectez au port 4000 sur votre hôte, vous vous connectez réellement au port 3306 sur le serveur Ubuntu.

créer un tunnel avant avec du mastic

erik
la source
Très bien, merci pour l'illustration. J'apprécie que vous ayez ajouté des tunnels de type "distant", que je n'ai pas couverts dans mes réponses.
Guss
1
Cette réponse est impressionnante
Mauricio Pasquier Juan
2
Réponse impressionnante et très illustrative +1
rkachach
1
Comment cela a si peu de votes est une honte.
Ryan Fisher
1
J'adore ces croquis. L'image vaut mille mots.
qartal
16

La réponse simple est oui, mais veuillez noter que le tunnel est réellement démarré sur votre ordinateur. La façon dont cela fonctionne est que vous créez une connexion SSH au serveur (qui est sécurisé), puis demandez au SSH d'écouter un port de votre côté et de transmettre toutes les connexions entrantes - vers un port spécifique sur une adresse d'hôte spécifique sur le du côté serveur. La cible du tunnel n'a pas besoin d'être le même serveur - il peut s'agir de toute autre adresse valide qui - dans le cas où ce n'est pas le serveur exécutant le serveur SSH lui-même - verra la connexion entrante comme si elle provenait du serveur SSH au lieu de de votre client.

Pour l'installer, ouvrez la boîte de dialogue de configuration Putty, sélectionnez le paramètre de la connexion que vous utilisez normalement pour accéder à votre serveur et cliquez sur "charger" (et non "ouvrir"). Ensuite, dans l'arborescence de gauche, accédez à Connexion-> SSH-> Tunnels et créez un nouveau tunnel "local" avec le port source 4000 et la destination "localhost: 3306" (car l'adresse de destination est résolue sur le serveur, du point de vue du serveur, le port MySQL est sur l'hôte local). Revenez ensuite à "session" et cliquez sur "Enregistrer" pour conserver vos paramètres pour la prochaine fois. Vous pouvez maintenant utiliser la connexion enregistrée pour vous connecter à votre serveur et après vous être connecté avec succès, chaque fois que vous vous connectez au port 4000 sur votre ordinateur, vous vous connectez réellement au port 3306 sur le serveur.

Si vous êtes sérieusement dans les tunnels et que vous utilisez un client MS-Windows, je suggère de regarder Putty Tunnel Manager qui utilise Putty pour configurer et exécuter des tunnels facilement sans avoir besoin d'avoir une console de mastic ouverte.

Guss
la source