J'ai utilisé ssh -L
dans le format suivant depuis longtemps pour connecter un front-end web fonctionnant localement à un service RPC ou HTTP distant.
ssh -L <local port>:localhost:<remote port> <remote host> # Format 1
Récemment, je me suis retrouvé à utiliser un autre type de tunnel pour me connecter à une base de données SQL à laquelle je ne pouvais accéder qu'à partir d'un autre serveur au sein de son réseau privé, formaté comme suit.
ssh -L <local port>:<final target host>:<remote port> <intermediate remote host> # Format 2
Bien que je comprenne les fonctions de ces deux formes, je n'ai pas un bon modèle mental pour savoir comment les deux peuvent fonctionner. Lorsque je ne connaissais que la première, je supposais que ssh -L
signifie "passer le trafic sur le port local port
a remote port
on remote host
et redirige ensuite le trafic de réponse vers localhost
." Cela indiquerait que remote host
est le destinataire du trafic transféré.
Format 2 et le ssh
(en particulier ce passage [1]) me conduisent à penser le contraire. Ces deux pages traitent l'hôte listé entre les " : "s dans le champ -L
et non l'argument remote host
à la fin de la commande, comme destinataire final du trafic transféré. De plus, le format 2 utilise l'hôte passé à la fin de la commande SSH comme jonction intermédiaire pour le trafic, en plus d'initialiser une session Shell distante.
En résumé, le deuxième type de ssh -L
La commande me porte à croire que le premier type ne devrait pas fonctionner comme il le fait. Pourquoi le format 1 peut-il fonctionner comme un moyen de faire suivre le trafic sur local port
a remote port
si le format 2 traite remote host
comme un arrêt intermédiaire pour le trafic ?
[1]
-L [bind_address :]port:remote_socket Chaque fois qu'une connexion est établie sur le port ou le socket local, la connexion est transmise par le canal sécurisé et un co-processeur est installé. canal sécurisé, et une connexion est établie vers l'un des deux ports suivants hôte port hostport ou le socket Unix remote_socket, de la machine distante.
Remarquez que ce passage ne mentionne jamais le nom d'hôte paramètre, passé comme dernier argument de toute commande SSH (par exemple, ssh -L <local port>:<...>:<remote port> <hostname>
).