La tunnellisation des données via SSH est assez simple:
ssh -D9999 [email protected]
configure le port 9999 sur votre localhost
tunnel example.com
, mais j’ai un besoin plus spécifique:
- Je travaille localement sur
localhost
host1
est accessible àlocalhost
host2
accepte uniquement les connexions dehost1
- Je dois créer un tunnel à partir
localhost
dehost2
Effectivement, je veux créer un tunnel SSH "multi-sauts". Comment puis-je faire ceci? Idéalement, j'aimerais le faire sans avoir besoin d'être superutilisateur sur aucune des machines.
host2
que la transmission ne soit refuséeRéponses:
Vous avez essentiellement trois possibilités:
Tunnel de
localhost
àhost1
:Comme indiqué ci-dessus, la connexion de
host1
àhost2
ne sera pas sécurisée.Tunnel de
localhost
lahost1
et dehost1
lahost2
:Cela ouvrira un tunnel de
localhost
àhost1
et un autre tunnel dehost1
àhost2
. Cependant le port9999
àhost2:1234
peut être utilisé par tout le monde surhost1
. Cela peut ou peut ne pas être un problème.Tunnel de
localhost
lahost1
et delocalhost
lahost2
:Cela ouvrira un tunnel de
localhost
àhost1
travers lequel le service SSHhost2
peut être utilisé. Ensuite, un deuxième tunnel est ouvert delocalhost
àhost2
travers le premier tunnel.Normalement, je choisirais l'option 1. Si la connexion de
host1
àhost2
doit être sécurisée, choisissez l'option 2. L'option 3 est principalement utile pour accéder à un servicehost2
accessible uniquement dehost2
lui-même.la source
-A
option to ssh.-f
, il sera immédiatement en arrière-plan localement, doncssh -f -L 9999:localhost:9999 host1
vous reconnecterez si vous avez appuyé sur ctrl-c dans le premier cas. Vous pouvez également ajouter-f
à la commande double ssh originale lors de sa première exécution en arrière-plan immédiatement.Il existe une excellente réponse expliquant l'utilisation de la
ProxyCommand
directive de configuration pour SSH :Ajoutez ceci à votre
~/.ssh/config
(voirman 5 ssh_config
pour plus de détails):Puis
ssh host2
tunnel automatiquement à travershost1
(fonctionne également avec le transfert X11, etc.).Cela fonctionne également pour toute une classe d'hôtes, par exemple identifiée par le domaine:
Mise à jour
OpenSSH 7.3 introduit une
ProxyJump
directive, simplifiant le premier exemple pourla source
ssh
, y comprisgit
,sftp
etc.ssh -F /path/to/altconfig
. Attention, ceci ignorera le système dans son ensemble/etc/ssh/ssh_config
.OpenSSH v7.3 prend en charge un
-J
commutateur et uneProxyJump
option, qui autorisent un ou plusieurs hôtes de saut séparés par des virgules. Vous pouvez donc le faire maintenant:la source
Nous avons une passerelle SSH dans notre réseau privé. Si je suis à l'extérieur et que je veux un shell distant sur une machine à l'intérieur du réseau privé, je devrais me connecter à la passerelle et de là à la machine privée.
Pour automatiser cette procédure, j'utilise le script suivant:
Qu'est-ce qui se passe:
la source
Après avoir lu ce qui précède et tout coller ensemble, j'ai créé le script Perl suivant (enregistrez-le sous le nom mssh dans / usr / bin et rendez-le exécutable):
Usage:
Pour accéder à HOSTC via HOSTA et HOSTB (même utilisateur):
Pour accéder à HOSTC via HOSTA et HOSTB et utiliser des numéros de port SSH autres que ceux par défaut et des utilisateurs différents:
Pour accéder à HOSTC via HOSTA et HOSTB et utiliser le transfert X:
Pour accéder au port 8080 sur HOSTC via HOSTA et HOSTB:
la source
mssh HOSTA HOSTD
vous vous retrouverez finalement sur HOSTB (et ne réaliserez peut-être pas ..)Cette réponse est similaire à kynan, car elle implique l'utilisation de ProxyCommand. Mais il est plus pratique d'utiliser IMO.
Si vous avez installé netcat sur vos machines de saut, vous pouvez ajouter cet extrait à votre ~ / .ssh / config:
ensuite
fera ce que vous avez demandé.
Je suis venu ici à la recherche du lieu d'origine où j'ai lu cette astuce. Je posterai un lien quand je le trouverai.
la source
J'ai fait ce que je pense que tu voulais faire avec
On me demande les deux mots de passe, puis je peux utiliser localhost: 9999 pour un proxy SOCKS vers host2. Je pense le plus près de l'exemple que vous avez montré en premier lieu.
la source
Signifie bind to localhost: 9999 et tout paquet envoyé à localhost: 9999 le transfère à host2: 80
Désigne tout paquet reçu par host1: 9999 et renvoyé à localhost: 9999.
la source
channel 3: open failed: administratively prohibited: open failed
message d'erreur.vous devriez pouvoir utiliser la redirection de port pour accéder à un service
host2
depuislocalhost
. Un bon guide se trouve ici . Extrait:Dans votre distribution, remplacez
localhost
dans l'exemple avechost2
ethost
avechost1
.la source
Dans cette réponse, je vais passer à travers un exemple concret. Il vous suffit de remplacer les noms d'hôte, noms d'utilisateur et mots de passe des ordinateurs par les vôtres.
Déclaration du problème
Supposons que nous ayons la topologie de réseau suivante:
Pour des raisons concrètes, supposons que nous possédons les noms d'hôte, noms d'utilisateur et mots de passe des ordinateurs suivants:
Objectif: nous voulons configurer un proxy SOCKS qui écoute sur le port
9991
deLocalPC
sorte que chaque fois qu'une connexionLocalPC
est établie à partir du port,9991
elle passemit.edu
ensuitehec.edu
.Exemple de cas d'utilisation:
hec.edu
dispose d'un serveur HTTP uniquement accessible sur http://127.0.0.1:8001 , pour des raisons de sécurité. Nous aimerions pouvoir visiter http://127.0.0.1:8001 en ouvrant un navigateur Web surLocalPC
.Configuration
Dans
LocalPC
, ajoutez dans~/.ssh/config
:Puis dans le terminal de
LocalPC
, lancez:Il vous demandera le mot de passe de
bob
onmit.edu
(iedylan123
), puis il vous demandera le mot de passe dejohn
onhec.edu
(iedoe456
).À ce stade, le proxy SOCKS s'exécute maintenant sur le port
9991
deLocalPC
.Par exemple, si vous souhaitez visiter une page Web sur l’
LocalPC
utilisation du proxy SOCKS, vous pouvez le faire dans Firefox:Quelques remarques:
~/.ssh/config
,HEC
est le nom de la connexion: vous pouvez le changer en tout ce que vous voulez.-D9991
ditssh
de configurer un proxy SOCKS4 sur le port9991
.la source
Si vous pouvez utiliser SSH sur les deux machines, jetez un œil à la directive ProxyCommand de ssh. Cela vous permettra de passer directement de localhost à host2 (en une seule commande si vous utilisez des clés publiques !!). Ensuite, vous pouvez faire ce que vous voulez avec host2.
http://www.statusq.org/archives/2008/07/03/1916/
la source
L'option 2 de la meilleure réponse pourrait être utilisée avec des utilisateurs de ssh différents de l'actuel aka: utilisateur @ hôte
la source
Dans mon cas j'ai fait
où
host2:8890
est exécuté sur un ordinateur portable Jupyter.Ensuite, j'ai configuré Firefox pour l'utiliser en
localhost:9999
tant qu'hôte SOCKS.Alors maintenant, le cahier est
host2
accessible sous Firefox àlocalhost:8890
partir de mon ordinateur .la source
Les trois options mentionnées dans la réponse acceptée ne fonctionnaient pas du tout pour moi. Étant donné que je n'ai pas beaucoup de permission sur les deux hôtes, et que mon équipe DevOps a des règles assez strictes en matière d'authentification et de MFA. D'une certaine manière, les commandes ci-dessus ne peuvent pas bien fonctionner avec notre authentification.
Cependant, le contexte est très similaire aux réponses ci-dessus: je ne peux pas directement entrer en ssh dans le serveur de production et je dois faire 1 saut en utilisant un serveur de saut.
Encore une autre solution - une solution naïve
J'ai fini par le faire d'une manière très naïve: au lieu d'essayer d'exécuter toutes les commandes sur mon ordinateur portable, je lance les commandes sur chaque ordinateur , comme ci-dessous:
ssh -v -L 6969:localhost:2222 -N your-protected.dest.server
. Si vous êtes invité à entrer un mot de passe, tapez-le.ssh -v -L 6969:localhost:6969 -N your-jump-server.host.name
. Cela transmettra toute votre demande sur le port 6969 de votre ordinateur portable au serveur de saut. Puis tour à tour, puisque nous avons configuré à notre étape précédente, le serveur de saut transférera à nouveau les demandes du port 6969 au port 2222 sur le serveur de destination protégé.Vous devriez voir la commande "se bloquer" après avoir imprimé un message - cela signifie qu'ils fonctionnent! Une exception - vous ne devriez pas voir le message d'erreur comme
Could not request local forwarding.
, si vous voyez ça, alors il ne fonctionne toujours pas :(. Vous pouvez maintenant essayer de lancer une requête sur le port 6969 à partir de votre ordinateur portable et voir si cela fonctionne.Si tout va bien si vous êtes quelqu'un qui a échoué toutes les méthodes ci-dessus, peut-être que vous pouvez essayer ceci.
la source