解決策 1:
ローカル ポート 22 でリッスンし、接続をリモート システムのポート 8090 に転送するように要求しています。ローカル ポート 22 はローカル SSH サーバーによって既に使用されているため、それはできません。
あなたが探しているのはリモート転送だと思います。 -L 22:localhost:8090
の置き換え -R 8090:localhost:22
で リモート ホストにポート 8090 でリッスンし、リクエストを SSH サーバーに転送するように指示します。
後でリモート サイトからアクセスできるように接続を実行したままにする場合は、関連するオプション (-o TCPKeepAlive=yes
または -o ServerAliveInterval=30
)
したがって、次のような結果になります:
ssh -N [email protected]_server -R 8090:localhost:22 -o ServerAliveInterval=30
また、サーバーとの間のネットワーク ホップのいずれかがダウンした場合、指定した KeepAlive オプションに関係なく接続が切断されるため、このコマンドを inittab に追加するか、daemontools パッケージまたはディストリビューションのパッケージを調べてください。これにより、常に起動時に開始され、システムのシャットダウン以外の何らかの理由で終了したときに再起動されます (または、無限にループするシェル スクリプトから実行することもできますが、init または daemontools はよりクリーンなソリューションです)。
解決策 2:
これができない理由は、ローカル コンピューターのポート 22 をリモート サーバーのポート 8090 に転送しようとしていて、ローカル サーバーのポート 22 で何かが既に実行されているためです。ほとんどの場合、SSH サーバーが実行されています。これは、22 を別の値に変更することで修正できます。次のコマンドを実行して、ポートが空いているかどうかを確認できます:
# netstat -lep --tcp
これにより、リッスンしているすべてのソケットが一覧表示されるため、ポートが一覧表示されていない場合は空いています。
解決策 3:
lsof -i :PortNumber コマンドを使用して、ポートが空いているかどうかを確認しています:
# lsof -i :2272
ポートが空いている場合、出力には何も表示されません。