web-dev-qa-db-ja.com

誰かが簡単な方法でSSHトンネルを説明できますか?

sshトンネルまたはリバーストンネルを行うためにエイリアスを使用していますが、どのように機能するのか理解できません。誰かがそれを非常に簡単な方法で説明する方法を知っていますか?

3つの主な用途は次のとおりです。

まず、ホームコンピューターを使用して、パスワードを使用せずにfoo.mycompany.comにsshできます(fooは職場のサーバーです)

1)foo.mycompany.com:8080を自宅のコンピューターのlocalhost:3000に移動する方法

2)自宅でhttp://bar.mycompany.comにアクセスできないが、foobarにアクセスできる場合、ホームコンピューターがhttp://bar.mycompany.comにアクセスできるようにする方法は?

3)自宅では、db.mycompany.comでMySQL dbにアクセスできないが、fooは、sshトンネルを使用してdb.mycompany.comにアクセスできるようにする方法はできます。

非常に簡単な言葉で説明できますか?これら3つ以外にも、実際に他の一般的な用途はありますか?ありがとう。

49

1)自宅からfooに接続すると仮定すると、リバーストンネルが必要です(-R)

ssh -R 8080:localhost:3000 foo.mycompany.com

これにより、fooで実行されているプロセスがlocalhost:8080に接続し、実際にポート3000で自宅のコンピューターと通信できるようになります。職場の他のコンピューターをfoo:8080に接続してポートで自宅のコンピューターにアクセスできるようにする場合3000、あなたが必要

ssh -R 0.0.0.0:8080:localhost:3000 foo.mycompany.com

ただし、これを機能させるには、fooのsshd_configにもこのオプションが必要です。

 GatewayPorts yes

2)sshでhttpプロキシを作成する最良の方法は、靴下を使用することです。最初に接続する

ssh -D 8888 foo.company.com

次に、ブラウザ接続設定に移動してプロキシ接続を有効にし、socks4/5およびHost:localhost、ポート8888を選択します。次に、ブラウザのアドレスバーにhttp://bar.mycompany.comと入力します。

3)ローカルポート転送(-L)が必要になりました。

ssh -L 3333:db.mycompany.com:3306 foo.mycompany.com

つまり、自宅のコンピューターからlocalhost:3333で接続でき、すべてがdb.mycompany.com:3306によって接続されたかのように、すべてがfoo.mycompany.comに転送されます。ホストdbは接続しているクライアントとしてfooを見るため、fooから作業するときに使用するのと同じユーザー名とパスワードでログインする必要があります。

-gフラグを追加すると、ホームネットワークから他のコンピューターがコンピューターポート3333に接続し、実際にdb:3306にアクセスできるようになります。

50
forcefsck

SSHトンネリングは非常に簡単です。一方の端で待機ソケットを開きます。誰かがそのリッスンソケットに接続すると、相手側から構成済みの場所への対応する接続​​が開かれ、SSHリンクを介して2つの間ですべての情報が双方向に転送されます。

4
Ben

かなり古い質問ですが、このページで説明してくれるかどうかを確認してください。 :)

https://www.ssh.com/ssh/tunneling/

基本的に、SSHトンネルは、ある場所から別の場所に暗号化されたデータを渡す(トンネル)ために使用できるトンネルです。

また、一般的にトラフィックを(トンネル経由、ワームホールを経由して)他の場所にルーティングするために使用され、ファイアウォールを通過するトンネリングやトラフィックのリダイレクト(暗号化されたポート転送)などを可能にします。

あなたとあなたのサーバーの間にファイアウォールがあるとしましょう。サーバーは、内部ネットワーク上の別のサーバー(server2)にアクセスできます。

[client]--------||------[server]----[sever2]

server2でWebサーバーにアクセスしたいとしますが、明らかな理由でこれを直接行うことはできません。ファイアウォールでポート22(ssh)が開いているとしましょう。ですから、serverからserver2へのSSHトンネル(on server)を作成します。これは、ポート22の(発信?)トラフィックが、このトンネルを介してserver:22-> server2:8から送信されることを意味します。

[client]--------||------[server:22]======[sever2:80]

したがって、(私が理解しているように)server:22に接続する場合、この新しいSSHトンネルを使用して、ポート22のトラフィックをserver2:80のWebサーバーにリダイレクトする必要があります。 (私が理解している限り、データはトンネル内でのみ暗号化されているため、server:80をSSLにする必要があるかどうか疑問に思う場合は、データの暗号化が解除されます)。

ある意味では、SSHを使用すること自体が、古いtelnet通信用のSSHトンネルであると思います。ほとんどの場合、SSHトンネリングについて耳にするのは、多くのハッカーが使用する気の利いた小さな機能であるファイアウォール管理者にアクセスすることなく、人々が提供する(安全な)ポート転送機能を参照しているということですセキュリティを回避します。

より正当な理由で。ファイアウォールなどで制限されている場合、または2つのマシン間のトラフィックを保護したい場合(SSHプログラムのように)、特定のトラフィックを異なるポートで動作する内部サーバーに中継するのに最適な方法です。

お役に立てれば。

[〜#〜] edit [〜#〜]

UNIXでこれを見つけましたSO https://unix.stackexchange.com/questions/46235/how-does-reverse-ssh-tunneling-work 、lotsあなたが必要なものの非常に明確な(そして絵による)説明付きの答えの!

2
Guy Park

まず、SSHについて説明します。

[〜#〜] ssh [〜#〜]は、暗号化された接続を使用してリモートマシンを接続するのに役立つリモートログインシェルです。したがって、リモートホストへのssh接続を確立すると、ホスト間の接続は安全で暗号化されます。

SSHトンネリングは、SSHセキュア接続を介してトラフィックをルーティングします。

簡単な言葉で言うと、SSHトンネリングは、1つの接続が別の接続によってカプセル化されているだけです。これを利点として、SSHクライアントを使用してトンネルを作成します。

次のコマンドは、簡単なソックスプロキシを作成するのに役立ちます

ssh -D 8080 user@sshserverip
2
Hari krishna