105 votes

Quelqu'un peut-il expliquer le tunnel SSH de manière simple?

Bien que j'utilise quelques alias pour faire un ssh tunnel ou un tunnel inverse, je ne comprends jamais comment cela fonctionne. Est-ce que quelqu'un sait comment l'expliquer de manière très simple ?

Je pense que les 3 utilisations principales sont :

Tout d'abord, je peux utiliser mon ordinateur personnel pour me connecter en ssh à foo.mycompany.com, sans utiliser de mot de passe (foo est un serveur au travail)

  1. Comment faire en sorte que foo.mycompany.com:8080 aille sur le localhost:3000 de mon ordinateur personnel ?

  2. Si je suis à la maison, je ne peux pas accéder à http://bar.mycompany.com, mais foo peut accéder à bar, comment faire en sorte que l'ordinateur personnel puisse accéder à http://bar.mycompany.com ?

  3. Si je suis à la maison, je ne peux pas accéder à la base de données MySQL à db.mycompany.com, mais foo le peut, comment rendre possible l'accès à db.mycompany.com également en utilisant un tunnel ssh.

Est-ce que cela peut être expliqué en termes très simples ? Y a-t-il en fait d'autres utilisations populaires en dehors de ces 3 ? Merci.

91voto

forcefsck Points 950

1) En supposant que vous vous connectiez de chez vous à foo, vous avez besoin d'un tunnel inversé (-R)

ssh -R 8080:localhost:3000 foo.monentreprise.com

Cela permettra aux processus s'exécutant sur foo de se connecter à localhost:8080 et de communiquer réellement avec votre ordinateur à domicile sur le port 3000. Si vous souhaitez que d'autres ordinateurs de votre travail puissent se connecter à foo:8080 et accéder à votre ordinateur à domicile sur le port 3000, alors vous avez besoin de

ssh -R 0.0.0.0:8080:localhost:3000 foo.monentreprise.com

mais pour que cela fonctionne, vous avez également besoin de cette option dans le sshd_config de foo

 GatewayPorts yes

2) La meilleure façon de créer un proxy http avec ssh est avec socks. Connectez-vous d'abord avec

ssh -D 8888 foo.entreprise.com

puis allez dans les paramètres de connexion de votre navigateur et activez la connexion proxy, choisissez socks4/5 et l'hôte : localhost, port 8888. Ensuite, tapez simplement http://bar.monentreprise.com dans la barre d'adresse de votre navigateur.

3) Maintenant, vous avez besoin d'une redirection de port locale (-L).

ssh -L 3333:db.monentreprise.com:3306 foo.monentreprise.com

Cela signifie que vous pourrez vous connecter à localhost:3333 depuis votre ordinateur à domicile et que tout sera redirigé vers db.monentreprise.com:3306 comme si la connexion était établie par foo.monentreprise.com. L'hôte de la base de données verra foo comme le client connecté, donc vous devez vous connecter avec le même nom d'utilisateur et mot de passe que vous utilisez lorsque vous travaillez depuis foo.

Ajouter le drapeau -g permettra à d'autres ordinateurs de votre réseau domestique de se connecter à votre port d'ordinateur 3333 et d'accéder réellement à db:3306.

12voto

chapagain Points 6536

Partage d'un tutoriel intéressant que j'ai trouvé avec quelques diagrammes : https://iximiuz.com/en/posts/ssh-tunnels/

Transfert de port local

Par exemple, accéder à la base de données d'un serveur en ligne (MySQL, Postgres, Redis, etc.) en utilisant un outil d'interface utilisateur sophistiqué depuis votre ordinateur portable.

ssh -L [local_addr:]local_port:remote_addr:remote_port [utilisateur@]adresse_sshd

Le drapeau -L indique que nous démarrons un transfert de port local.

Ce que cela signifie vraiment :

  • Sur votre machine, le client SSH commencera à écouter sur le local_port (probablement, sur localhost).
  • Tout le trafic vers ce port sera redirigé vers le remote_address:remote_port sur la machine à laquelle vous vous êtes connecté en SSH.

entrer la description de l'image ici

Transfert de port distant

Exposer un service local au monde extérieur, par exemple, exposer un service de développement depuis votre ordinateur portable vers Internet public pour une démonstration.

ssh -R [remote_addr:]remote_port:local_addr:local_port [utilisateur@]adresse_gateway

Le drapeau -R indique que nous démarrons un transfert de port distant.

entrer la description de l'image ici

9voto

Guy Park Points 446

Une question assez ancienne, mais voyez si cette page peut vous aider à l'expliquer, elle contient de jolies images et tout. :)

https://www.ssh.com/ssh/tunneling/

Fondamentalement, un tunnel SSH est un tunnel qui peut être utilisé pour transférer (tunneler) des données d'un endroit à un autre, de manière chiffrée.

Il est également couramment utilisé pour router le trafic (via un tunnel, pensez à un trou de ver) vers un autre endroit, ce qui permet des choses comme le contournement d'un pare-feu ou la redirection du trafic (transfert de port chiffré).

Disons qu'il y a un pare-feu entre vous et le serveur. Le serveur peut accéder à un autre serveur (serveur2) sur son réseau interne.

[client]--------||------[server]----[sever2]

Disons que vous voulez accéder à un serveur web sur serveur2, et pour des raisons évidentes vous ne pouvez pas le faire directement. Disons que le port 22 (ssh) est ouvert sur le pare-feu. Donc ce que nous ferions, c'est créer un tunnel SSH (sur serveur) de serveur à serveur2. Cela signifie que tout trafic (sortant ?) sur le port 22 sera envoyé, via ce tunnel, de serveur:22 -> serveur2:80.

[client]--------||------[server:22]======[sever2:80]

Donc (tel que je le comprends), si nous nous connectons à serveur:22, cela devrait rediriger le trafic sur le port 22 vers le serveur web sur serveur2:80 en utilisant ce nouveau tunnel SSH. (tel que je le comprends, les données ne sont chiffrées que dans le tunnel, donc à la fin ce seront des données déchiffrées, si vous vous demandez si serveur:80 doit être SSL).

Je suppose d'une certaine manière que l'utilisation de SSH est en soi un tunnel SSH pour votre vieille communication telnet. C'est juste que la plupart du temps, lorsque vous entendez parler de tunnels SSH, les gens font référence à la fonctionnalité de (transfert sécurisé de) port qu'il offre, sans avoir à accéder à l'administrateur du pare-feu, ce qui est une petite fonction pratique que beaucoup de pirates aiment utiliser pour contourner la sécurité.

Pour des raisons plus légitimes ; c'est une excellente façon de relayer certains trafics vers un serveur interne qui fonctionne sur un port différent, si vous êtes limité par un pare-feu et ainsi de suite, ou si vous voulez sécuriser le trafic entre deux machines (comme le fait le programme SSH).

J'espère que cela vous aidera.

ÉDITION

J'ai trouvé cela sur le SO UNIX https://unix.stackexchange.com/questions/46235/how-does-reverse-ssh-tunneling-work, de nombreux réponses avec des explications très claires (et illustrées) de ce dont vous avez besoin!

6voto

Ben Points 14995

Le tunnel SSH est très simple. Il ouvre un socket d'écoute à une extrémité. Chaque fois que quelqu'un se connecte à ce socket d'écoute, il ouvre une connexion correspondante de l'autre côté vers l'emplacement configuré, puis transfère toutes les informations dans les deux sens via le lien SSH.

2voto

Hari krishna Points 133

Tout d'abord, je vais expliquer SSH :

SSH est une coquille de connexion à distance qui vous aide à vous connecter à des machines distantes en utilisant une connexion chiffrée. Ainsi, une fois que vous avez établi une connexion ssh avec un hôte distant, la connexion entre les hôtes est sécurisée et chiffrée.

Le tunnel SSH consiste à router votre trafic à travers une connexion sécurisée SSH.

En termes simples, le tunnel SSH n'est rien d'autre qu'une connexion encapsulée dans une autre connexion. En tirant parti de cela, nous créons des tunnels en utilisant un client SSH.

La commande suivante vous aide à créer un simple proxy socks

ssh -D 8080 user@sshserverip

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X