SSHを転送するためにSSHトンネルを設定するにはどうすればよいですか?


13

ルーターの背後にUbuntuを搭載したコンピューターがありますが、構成できません。ただし、そのコンピューターへのsshアクセスが必要です。sshトンネリングで可能だと思いますが、どうすればいいのかわかりません。トンネリングをセットアップしたい別のサーバーがあります。どうやってするの?それとも、この問題を解決する他のアイデアがありますか?

私は試した:

ssh -N user@my_server -L 22/localhost/8090

しかし、それは言う:

bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 22
Could not request local forwarding.

回答:


18

ローカルポート22でリッスンし、接続をリモートシステムのポート8090に転送するように要求しています。ローカルポート22がローカルSSHサーバーによって既に使用されているため、それはできません。

あなたが探しているのはリモート転送だと思います。に置き換える-L 22:localhost:8090-R 8090:localhost:22、ポート8090でリッスンし、リクエストをSSHサーバーに転送するようリモートホストに指示します。

後でリモートサイトからアクセスできるように接続を実行したままにする場合は、関連するオプション(-o TCPKeepAlive=yesまたは-o ServerAliveInterval=30)を追加して、非アクティブが原因で接続がタイムアウトにならないようにする必要があります。

したがって、次のような結果になります。

ssh -N user@my_server -R 8090:localhost:22 -o ServerAliveInterval=30

また、ユーザーとサーバー間のネットワークホップのいずれかがダウンしている場合、指定したKeepAliveオプションに関係なく接続が切断されるため、このコマンドをinittabに追加するか、daemontoolsパッケージまたはディストリビューションの同等であるため、ブート時に常に起動し、システムシャットダウン以外の何らかの理由で終了すると再起動されます(または無限ループするシェルスクリプトから実行できますが、initまたはdaemontoolsはよりクリーンなソリューションです)。


それはほとんど動作します。コンピューターに接続できますが、サーバーにログオンしているときにのみ接続できます。どこからでもそのポート経由で接続したいと思います。
クルー

3
サーバーのパブリックアドレスまたはワイルドカードをポート転送定義(-R 111.222.333.444:8090:localhost:22または-R *:8090:localhost:22)に追加すると、そのようなことはできますがサーバーで無効にできます。サーバーが制御するサーバーである場合、sshd_configでGatewayPortsオプションが有効になっていることを確認します。
デビッドスピレット2009年

私はsshトンネリングを行うのに役立つスクリプトを書きました。次のURL
Nam Nguyen

GatewayPorts Yessshd_configに追加すると、ポートを公開できました。
アダムF

8

これができない理由は、ローカルコンピューターのポート22をリモートサーバーのポート8090に転送しようとしていて、ローカルサーバーのポート22で既に何かが実行されているためです。ほとんどの場合、SSHサーバーが実行されています。これを修正するには、22を別の値に変更します。次を実行することにより、ポートが空いているかどうかを確認できます。

# netstat -lep --tcp

これはすべてのリスニングソケットをリストするため、ポートがリストされていない場合は無料です。


3

ポートが空いているかどうかを確認するためにlsof -i:PortNumberコマンドを使用しています。

# lsof -i :2272

ポートが空いている場合、出力には何も表示されません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.