web-dev-qa-db-ja.com

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

ルーターの後ろに設定できない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.
13
klew

ローカルポート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はよりクリーンなソリューションです)。

18
David Spillett

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

# netstat -lep --tcp

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

8
David Pashley

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

# lsof -i :2272

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

3
Taras