コンピューターをSOCKSプロキシとして使用したい。あなたはただしなければなりませんかssh -D port_number hostname
? Linuxユーザー名をhostname
にする必要がありますか?
tl; dr-以下の太字のテキストを検索します。
注:目的の値に置き換える必要がある文字列には、$
プレフィックスを使用します。この構文はではありませんシェルの変数と完全に互換性があることを意味します。
ssh -D
の使用法は、実際には次のようになります。
ssh -D $port_number $hostname
または
ssh -D $port_number $username@$hostname
ここで、$hostname
はいくつかのマシンを識別します。 IPアドレス、DNSまたは/etc/hosts
ファイルまたはssh_config
ファイルなどで解決可能なアドレスにすることができます。最初のコマンドは、ssh_config
ファイルで特に指定されていない限り、現在の(ローカル)ユーザー名を使用します(デフォルトではそうではありません)。 $username
マシンに有効な認証情報(要求された場合の$hostname
およびパスワードなど)を提供する必要があります。
これにより、$port_number
TCPポートがlocalコンピュータに開かれ、その上にSOCKSサーバーが確立されます。一部のポートを開くことができない場合があります。通常のユーザーとして、特に1024
よりも低い場合は、大きい番号を使用します。
一般に、ssh
によって提供されるSOCKSプロキシがない状況は次のとおりです。
A -> D
ここで、A
はクライアント(Webブラウザーなど)、D
はサーバー(Webサーバーなど)です。しかし、プロキシを使用すると、これは次のようになります。
A -> B -> C -> D
どこ:
A
は、SOCKSアドレスとしてB:$port_number
を使用する単一のクライアントを表します。多くのクライアントがあるかもしれません。B
は、ssh -D $port_number C
が実行され、TCP $port_number
がA
からの着信接続をリッスンするマシンです。C
は$hostname
であり、B
は接続先です。通常D
からA
への通信は、D
からC
に到達します。D
は任意のサーバーであり、C
からの通信を認識しており、A
およびB
が関係していることに気付かない場合があります。多くのサーバーがあるかもしれません。これらの文字の一部は、特定の使用例では同じマシンを指す場合があります。明らかに、A
= C
の場合は単純なA -> D
接続よりも直接的な利点はありませんが、他にも便利なケースがあります。
上記のssh
コマンドを実行し、localブラウザーにlocalhost:$port_number
でSOCKSを使用するように指示するとします。これは、A
= B
の場合です。ブラウザのトラフィックが転送され、アクセスしたサイト(D
)には、$hostname
(C
)からの通信がブラウザで実行されているかのように表示されます。
他のコンピューターを開いているポート(A
≠B
、SOCKSサーバーアドレスとして$your_IP:$port_number
を使用)に接続する場合は、次の操作が必要です。
$port_number
;への着信接続を許可するようにファイアウォールを構成します。-g
オプションでssh -D
を使用します。または
ssh
接続を介して、それらの接続がローカルで(A
= B
のように)実行中のssh -D ...
にローカルに表示されるため、ファイアウォールは干渉せず、-g
も必要ありません。これは、彼らの側で呼び出されるssh -L $some_port:localhost:$port_number $your_IP
またはあなたの側で呼び出されるssh -R $some_port:localhost:$port_number $their_IP
によって行うことができます。クライアントは、ブラウザのSOCKSサーバーアドレスとしてlocalhost:$some_port
を使用します。$hostname
をB
のlocalhost
にできない理由はありません。できる。この場合、B
= C
です。これは、ローカルブラウザー(A
= B
= C
)でこのSOCKSプロキシを使用する場合は無意味ですが、外部からの接続を許可する場合は完全に意味があります。 これはあなたがやりたいことだと思います。コマンドは次のようになります:
ssh -g -f -N -D $port_number localhost
キーベースの認証 を確立したい場合があるので、ssh
からlocalhost
へのこのlocalhost
接続はパスワードを要求しません。ファイアウォールのスタンドに関する上記の発言。 SOCKSサーバーアドレスとして$your_IP:$port_number
を使用できる人は、アクセスするサーバーから、まるで自分のコンピューターにいるかのように見えます。
man 1 ssh
の関連フラグメント:
-D [bind_address:]port
ローカルの「動的」アプリケーションレベルのポート転送を指定します。これは、ローカル側でport
をリッスンするソケットを割り当てることで機能し、オプションで指定されたbind_address
にバインドされます。このポートへの接続が行われると、接続は安全なチャネルを介して転送され、アプリケーションプロトコルを使用して、リモートマシンから接続先を決定します。現在、SOCKS4およびSOCKS5プロトコルがサポートされており、ssh
はSOCKSサーバーとして機能します。 rootのみが特権ポートを転送できます。 [...]
-f
コマンド実行の直前にバックグラウンドに移動するようにssh
に要求します。 [...]
-g
リモートホストがローカルの転送ポートに接続できるようにします。
-N
リモートコマンドを実行しないでください。これは、ポートを転送するだけの場合に役立ちます。 [...]