SSHポート転送(通信接続エンドポイント)のポートはどのプロセスに属していますか?

SSHポート転送(通信接続エンドポイント)のポートはどのプロセスに属していますか?

(1) リモート配信の場合:

-R [bind_address:]port:host:hostport
         Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side.  This works by
         allocating a socket to listen to port on the remote side, and whenever a connection is made to this port, the connection is forwarded over the
         secure channel, and a connection is made to host port hostport from the local machine.

         Port forwardings can also be specified in the configuration file.  Privileged ports can be forwarded only when logging in as root on the
         remote machine.  IPv6 addresses can be specified by enclosing the address in square brackets.

         By default, the listening socket on the server will be bound to the loopback interface only.  This may be overridden by specifying a
         bind_address.  An empty bind_address, or the address ‘*’, indicates that the remote socket should listen on all interfaces.  Specifying a
         remote bind_address will only succeed if the server's GatewayPorts option is enabled (see sshd_config(5)).

         If the port argument is ‘0’, the listen port will be dynamically allocated on the server and reported to the client at run time.  When used
         together with -O forward the allocated port will be printed to the standard output.

hostportターゲットで実行されているターゲットプロセスの接続エンドポイントを指定しますhost

port 接続エンドポイントです。

  • SSHサーバープロセスで、または
  • SSHサーバーと同じソースホストで実行されているプロセスで自己接続してSSHトンネルを使用したいですかport

(私の推測は後者です)

(2) ローカル配信の場合:

 -L [bind_address:]port:host:hostport
         Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.  This works by
         allocating a socket to listen to port on the local side, optionally bound to the specified bind_address.  Whenever a connection is made to
         this port, the connection is forwarded over the secure channel, and a connection is made to host port hostport from the remote machine.  Port
         forwardings can also be specified in the configuration file.  IPv6 addresses can be specified by enclosing the address in square brackets.
         Only the superuser can forward privileged ports.  By default, the local port is bound in accordance with the GatewayPorts setting.  However,
         an explicit bind_address may be used to bind the connection to a specific address.  The bind_address of “localhost” indicates that the listen‐
         ing port be bound for local use only, while an empty address or ‘*’ indicates that the port should be available from all interfaces.

hostportターゲットで実行されているターゲットプロセスの接続エンドポイントを指定しますhost

port 接続エンドポイントです。

  • SSHクライアントプロセスで、または
  • SSHクライアントと同じソースホストで実行されているプロセスで、独自の接続を介してSSHトンネルを使用したいですかport

(私の推測は後者です)

(3) SOCKS プロキシの場合:

 -D [bind_address:]port
         Specifies a local “dynamic” application-level port forwarding.  This works by allocating a socket to listen to port on the local side, option‐
         ally bound to the specified bind_address.  Whenever a connection is made to this port, the connection is forwarded over the secure channel,
         and the application protocol is then used to determine where to connect to from the remote machine.  Currently the SOCKS4 and SOCKS5 protocols
         are supported, and ssh will act as a SOCKS server.  Only root can forward privileged ports.  Dynamic port forwardings can also be specified in
         the configuration file.

         IPv6 addresses can be specified by enclosing the address in square brackets.  Only the superuser can forward privileged ports.  By default,
         the local port is bound in accordance with the GatewayPorts setting.  However, an explicit bind_address may be used to bind the connection to
         a specific address.  The bind_address of “localhost” indicates that the listening port be bound for local use only, while an empty address or
         ‘*’ indicates that the port should be available from all interfaces.

port接続エンドポイントです。

  • SSHクライアントプロセスで
  • SSH SOCKSサーバー上または
  • SSHクライアントと同じホストでプロセスを実行しており、SOCKSを使用してサーバーに接続したいですかport

(私の考えは2番目のようです。SSHクライアントに独自のデフォルトポートがあるので、最初のものではないようです。3番目のものはわかりません)

ベストアンサー1

このスケッチはあなたのすべての質問に答えるのに役立ちます。https://unix.stackexchange.com/a/118650/121504

しかし、あなたの質問に明確に答えるには、次のようにします。

  1. リモート配信の場合:

    portSSH サーバーの接続エンドポイントです。

  2. ローカル配信の場合:

    portSSH クライアントプロセスの接続エンドポイントです。

  3. SOCKSプロキシの場合:

    portSSH クライアントプロセスの接続エンドポイントです。

ただし、より視覚的な説明は、実際には上記のスケッチです。しかし要約すると:

これ最初ポート(SOCKプロキシに固有のもの)は次のとおりです。いつもこれ自由港次の手順で接続します。これその他port は、そのポートがあるポートです。既存サービスの実行

編集する:

実際の問題が何であるかを理解している場合は、より簡単に理解できるのは、lsof私の例では.yourポートを使用することです12345

リモート配信の場合:

[local ] $ ssh -R 12345:localhost:22 remote
[remote] $ lsof -P | grep 12345
sshd 27772 root  7u IPv6 1304283702 0t0 TCP localhost:12345 (LISTEN)
sshd 27772 root  8u IPv4 1304283703 0t0 TCP localhost.localdomain:12345 (LISTEN)

ローカル配信の場合:

[local] $ ssh -L 12345:localhost:22 remote
[local] $ lsof -p $(pidof ssh) -P | grep 12345
ssh  6779 jakuje    4u  IPv6 146565      0t0     TCP ip6-localhost:12345 (LISTEN)
ssh  6779 jakuje    5u  IPv4 146566      0t0     TCP localhost:12345 (LISTEN)

動的ポート転送の場合:

[local] $ ssh -D 12345 [email protected]
[local] $ lsof -p $(pidof ssh) -P | grep 12345
ssh     11388 jakuje    4u  IPv6 173537    0t0   TCP ip6-localhost:12345 (LISTEN)
ssh     11388 jakuje    5u  IPv4 173538    0t0   TCP localhost:12345 (LISTEN)

おすすめ記事