Soluzione 1:
Gli stai chiedendo di ascoltare sulla tua porta locale 22 e di inoltrare le connessioni alla porta 8090 di un sistema remoto. Non puoi farlo, perché la tua porta locale 22 è già occupata dal tuo server SSH locale.
Penso che quello che stai cercando sia l'inoltro remoto. Sostituisce -L 22:localhost:8090
con -R 8090:localhost:22
dirà all'host remoto di ascoltare sulla porta 8090 e inoltrare le richieste al tuo server SSH.
Se stai lasciando la connessione in esecuzione in modo da poter entrare più tardi da un sito remoto, allora vorrai assicurarti che la connessione non vada in timeout a causa di inattività aggiungendo le opzioni pertinenti (-o TCPKeepAlive=yes
o -o ServerAliveInterval=30
)
Quindi ti ritroverai con qualcosa come:
ssh -N [email protected]_server -R 8090:localhost:22 -o ServerAliveInterval=30
Inoltre, se uno degli hop di rete tra te e il server è inattivo in qualsiasi momento, la connessione si interromperà nonostante qualsiasi opzione KeepAlive specificata, quindi potresti voler aggiungere questo comando a inittab o esaminare il pacchetto daemontools o la tua distribuzione equivalent , in modo che si avvii sempre all'avvio e venga riavviato quando esce per qualche motivo diverso dall'arresto del sistema (oppure potresti eseguirlo da uno script di shell che si ripete all'infinito, ma init o daemontools sono soluzioni più pulite).
Soluzione 2:
Il motivo per cui non puoi farlo è perché stai provando a inoltrare la porta 22 sul computer locale alla porta 8090 sul server remoto e qualcosa è già in esecuzione sulla porta 22 sul server locale. Molto probabilmente hai un server SSH in esecuzione. Puoi risolvere questo problema modificando il 22 con un valore diverso. Puoi verificare se una porta è libera eseguendo:
# netstat -lep --tcp
Questo elenca tutti i socket in ascolto, quindi se la porta non è elencata, allora è libera.
Soluzione 3:
Sto usando il comando lsof -i :PortNumber per verificare se la porta è libera:
# lsof -i :2272
se la porta è libera non vedrai nulla in output.