web-dev-qa-db-fra.com

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

Bien que j'utilise un alias pour faire ssh tunnel ou 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 ssh à foo.mycompany.com, sans utiliser de mot de passe (foo est un serveur au travail)

1) Comment faire foo.mycompany.com:8080 allez sur mon ordinateur personnel localhost:3000?

2) Si à la maison, je ne peux pas accéder à http://bar.mycompany.com, mais foo peut accéder à bar, comment rendre l'ordinateur personnel capable d'accéder à http://bar.mycompany.com?

3) Si à la maison, je ne peux pas accéder à la base de données MySQL à db.mycompany.com, mais foo peut, comment rendre accessible db.mycompany.com utilisant également ssh tunnel.

Peut-on l'expliquer en termes très simples? Y a-t-il en fait une autre utilisation populaire en plus de ces 3? Merci.

49

1) En supposant que vous vous connectiez de la maison à foo, vous avez besoin d'un tunnel inverse (-R)

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

Cela permettra aux processus exécutés sur foo de se connecter à localhost:8080 et parler à votre ordinateur personnel au port 3000. Si vous souhaitez que d'autres ordinateurs de votre travail puissent se connecter à foo: 8080 et accéder à votre ordinateur personnel au port 3000, vous devez

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

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

 GatewayPorts yes

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

ssh -D 8888 foo.company.com

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

3) Vous avez maintenant besoin d'un port local en avant (-L).

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

Cela signifie que vous pourrez vous connecter à localhost:3333 à partir de votre ordinateur personnel et tout sera transmis à db.mycompany.com:3306 comme si la connexion avait été établie par foo.mycompany.com. L'hôte db verra foo comme le client se connectant, vous devez donc vous connecter avec le même nom d'utilisateur et mot de passe que vous utilisez lorsque vous travaillez à partir de foo.

L'ajout de l'indicateur -g permettra aux autres ordinateurs de votre réseau domestique de se connecter au port 3333 de votre ordinateur et d'accéder réellement à db: 3306.

50
forcefsck

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

4
Ben

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

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

Fondamentalement, un tunnel SSH est un tunnel qui peut être utilisé pour transmettre (tunnel) des données d'un endroit à un autre, cryptées.

Il est également couramment utilisé pour acheminer le trafic (via un tunnel, pensez au trou de ver) vers un autre endroit, ce qui permet des choses telles que la tunnelisation à travers un pare-feu ou la redirection du trafic (redirection de port cryptée).

Disons que vous avez un pare-feu entre vous et le serveur. Le serveur peut accéder à un autre serveur (server2) sur son réseau interne.

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

Supposons que vous souhaitiez accéder à un serveur Web sur server2, 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) à partir de serveur à serveur2. Cela signifie que tout trafic (sortant?) Sur le port 22 sera envoyé, via ce tunnel, depuis le serveur: 22 -> server2: 80.

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

Donc (si je comprends bien), si nous nous connectons à serveur: 22, il devrait rediriger le trafic sur le port 22 vers le serveur Web sur server2:80 en utilisant ce nouveau tunnel SSH. (pour autant que je comprends, les données ne sont cryptées que dans le tunnel, donc la fin sera des données décryptées, si vous vous demandez si le serveur: 80 doit être SSL).

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

Sur les raisons les plus légitimes; c'est un excellent moyen de relayer un certain trafic vers un serveur interne qui fonctionne sur un port différent, si vous êtes limité par un pare-feu et autres, ou si vous souhaitez sécuriser le trafic entre deux machines (comme le fait le programme SSH).

J'espère que cela t'aides.

[~ # ~] modifier [~ # ~]

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

2
Guy Park

Tout d'abord, je vais expliquer SSH:

SSH est un shell de connexion à distance qui vous aide à connecter des machines distantes à l'aide d'une connexion cryptée. Ainsi, une fois que vous avez établi une connexion ssh avec n'importe quel hôte distant, la connexion entre les hôtes est sécurisée et cryptée.

Le tunneling SSH achemine votre trafic via une connexion sécurisée SSH.

En termes simples, le tunneling SSH n'est rien mais une connexion est encapsulée par une autre connexion. En prenant cela comme un avantage, nous créons des tunnels en utilisant le client SSH.

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

ssh -D 8080 user@sshserverip
2
Hari krishna