youatwork@officepc$ autossh -R 12345:localhost:22 notroot@serverpc
Plus tard:
you@homepc$ autossh -L 23456:localhost:12345 notroot@serverpc
you@homepc$ ssh youatwork@localhost -p 23456
Ce que vous pouvez faire est le suivant: à l'étape 1, transférez un port distant du PC de bureau au serveur ( 12345
est utilisé comme exemple, tout port> 1024 devrait le faire). La connexion à 12345 sur le serveur devrait vous connecter au port 22 sur officepc.
À l'étape 2, transférez le port 23456 de votre ordinateur personnel vers 12345 sur le serveur (d'où il est transféré à officepc: 22, comme configuré à l'étape 1)
À l'étape 3, vous vous connectez au port local 23456 avec la connexion de votre ordinateur de bureau . Ceci est transmis à l'étape 2 au port 12345 de votre serveur et à l'étape 1 à votre PC de bureau.
Notez que j'utilise autossh pour les transferts, car c'est un wrapper ssh qui reconnecte automatiquement le tunnel s'il est déconnecté; cependant ssh normal fonctionnerait aussi bien, tant que la connexion ne tombe pas.
Il existe une vulnérabilité possible: toute personne qui peut se connecter à localhost: 12345 sur serverpc peut maintenant se connecter à officepc: 22 et essayer de le pirater. (Notez que si vous utilisez un serveur SSH, vous devez de toute façon le sécuriser au-dessus des protections de base qui sont activées par défaut; je recommande au moins de désactiver la connexion root et la désactivation de l'authentification par mot de passe - voir par exemple ceci )
Edit : j'ai vérifié cela avec la même config, et ça marche. GatewayPorts no
affecte uniquement les ports ouverts sur le monde dans son ensemble, pas les tunnels locaux. Voici les ports redirigés:
homepc:
outgoing ssh to serverpc:22
listening localhost:23456 forwarded through ssh tunnel
serverpc:
listening ssh at *:22
incoming localhost ssh tunnel (from homepc) forwarded to localhost:12345
listening localhost ssh tunnel (from officepc) forwarded from localhost:12345
officepc:
outgoing ssh to serverpc:22
incoming localhost through ssh tunnel (from serverpc) forwarded to localhost:22
Donc, en ce qui concerne la pile réseau, c'est tout le trafic local sur les interfaces de bouclage respectives (plus les connexions ssh à serverpc); par conséquent, GatewayPorts
n'est pas vérifié du tout.
Il y a cependant la directive AllowTcpForwarding
: si c'est le cas no
, cette configuration échouera car aucun transfert n'est autorisé du tout, pas même à travers l'interface de bouclage.
Mises en garde :
si vous utilisez autossh et ssh récent, vous voudrez peut-être utiliser ssh ServerAliveInterval
et ServerAliveCountMax
pour garder le tunnel en place. Autossh a une vérification intégrée, mais apparemment, il y a des problèmes sur Fedora. -M0
le désactive et -oServerAliveInterval=20 -oServerAliveCountMax=3
vérifie si la connexion est active - essaie toutes les 20 secondes, s'il échoue 3 fois de suite, arrête ssh (et autossh en crée une nouvelle):
autossh -M0 -R 12345:localhost:22 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
autossh -M0 -L 23456:localhost:12345 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
il peut être utile de redémarrer le tunnel ssh en cas d'échec du transfert, en utilisant -oExitOnForwardFailure=yes
- si le port est déjà lié, vous pouvez obtenir une connexion SSH fonctionnelle, mais pas de tunnel transféré.
il ~/.ssh/config
est conseillé d' utiliser les options (et les ports), sinon les lignes de commande deviennent trop verbeuses. Par exemple:
Host fwdserverpc
Hostname serverpc
User notroot
ServerAliveInterval 20
ServerAliveCountMax 3
ExitOnForwardFailure yes
LocalForward 23456 localhost:12345
Ensuite, vous pouvez utiliser uniquement l'alias du serveur:
autossh -M0 fwdserverpc