Vous lui demandez d'écouter sur votre port local 22 et de transmettre les connexions au port 8090 d'un système distant. Vous ne pouvez pas le faire, car votre port local 22 est déjà pris par votre serveur SSH local.
Je pense que ce que vous recherchez est un transfert à distance. Le remplacement -L 22:localhost:8090
par -R 8090:localhost:22
indique à l'hôte distant d'écouter sur le port 8090 et de transmettre les demandes à votre serveur SSH.
Si vous laissez la connexion en cours pour pouvoir vous connecter ultérieurement à partir d'un site distant, vous voudrez vous assurer que la connexion n'expire pas en raison de l'inactivité en ajoutant les options pertinentes ( -o TCPKeepAlive=yes
ou -o ServerAliveInterval=30
)
Vous vous retrouverez donc avec quelque chose comme:
ssh -N user@my_server -R 8090:localhost:22 -o ServerAliveInterval=30
De plus, si l'un des sauts de réseau entre vous et le serveur est interrompu à un moment donné, la connexion sera interrompue malgré toutes les options KeepAlive que vous spécifiez, de sorte que vous souhaiterez peut-être ajouter cette commande à inittab, ou consulter le package daemontools ou votre distribution. équivalent, de sorte qu'il démarre toujours au démarrage et redémarre lorsqu'il se termine pour une raison autre que l'arrêt du système (ou vous pouvez l'exécuter à partir d'un script shell qui boucle indéfiniment, mais init ou daemontools sont des solutions plus propres).
GatewayPorts Yes
à mon sshd_config m'a aidé à ouvrir le port au public.La raison pour laquelle vous ne pouvez pas le faire est que vous essayez de transférer le port 22 de l'ordinateur local vers le port 8090 sur le serveur distant et que quelque chose est déjà en cours d'exécution sur le port 22 sur le serveur local. Vous avez probablement un serveur SSH en cours d'exécution. Vous pouvez résoudre ce problème en remplaçant le 22 par une valeur différente. Vous pouvez vérifier si un port est libre en exécutant:
Cela répertorie toutes les sockets d'écoute, donc si le port n'est pas répertorié, alors c'est gratuit.
la source
J'utilise la commande lsof -i: PortNumber pour vérifier si le port est libre:
si le port est libre, vous ne verrez rien en sortie.
la source