sshエラーメッセージのチャンネル番号は何を指しますか?


12

以下の例では、チャンネル番号は何に対応していますか?サーバー上にあるのはどれですか?クライアントにはどちらがありますか?

  $ ssh -L1570:127.0.0.1:8899 root@thehost
    Password:
    Last login: Fri Aug  9 13:08:44 2013 from theclientip
    Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
    You have new mail.
    # channel 2: open failed: administratively prohibited: open failed
    channel 3: open failed: administratively prohibited: open failed
    channel 2: open failed: administratively prohibited: open failed

sshクライアントはWindows 7で実行されており、サーバーにはポート8899で実行されているTomcatサーバーがあります。

Tomcatはリモートマシンで127.0.0.1をリッスンしていないため、コマンドをssh -L1570:thehostpublicip:8899 root@thehostポートフォワードに変更すると動作します。そのため、サーバー上でポートフォワーディングが正常に機能しているようです。

私のsshd構成ファイルには、次の2行が含まれています。

# Port forwarding
AllowTcpForwarding yes

# If port forwarding is enabled, specify if the server can bind to INADDR_ANY.
# This allows the local port forwarding to work when connections are received
# from any remote host.
GatewayPorts yes

Tomcatではなく別のプロセスのポート転送を設定しようとしていますが、上記のものと同様のエラーメッセージが表示されるので、エラーメッセージの意味を理解しようとしています。

回答:


21

チャネルに関するSSHプロトコルのドキュメントから:

すべての端末セッション、転送された接続などはチャネルです。どちらの側でもチャネルを開くことができます。複数のチャネルが単一の接続に多重化されます。

チャネルは、両端の番号で識別されます。チャネルを参照する番号は、両側で異なる場合があります。チャネルを開く要求には、送信者のチャネル番号が含まれます。その他のチャネル関連のメッセージには、そのチャネルの受信者のチャネル番号が含まれています。

チャネルはフロー制御されます。ウィンドウスペースが使用可能であることを示すメッセージを受信するまで、チャネルにデータを送信することはできません。

ポート転送

使用しているコマンドは問題ありません。接続しようとしているサービスが起動し、接続を受け入れていることを確認しますか?チャネルエラーは、そうではないことを示しているようです。

アクティブなチャンネルは何ですか?

アクティブなssh接続がある場合は、次のキーの組み合わせを使用してヘルプを取得できます。

Shift+に~続いてShift+?

$ ~?
Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)
debug2: channel 2: written 480 to efd 8

次に、このキーの組み合わせを使用して、アクティブなチャネルのリストを取得できます。

Shift+に~続いてShift+#

$ ~#
The following connections are open:
  #2 client-session (t4 r0 i0/0 o0/0 fd 6/7 cc -1)
debug2: channel 2: written 93 to efd 8

4

Tomcatがループバック(127.0.0.1)でリッスンしていない場合、そのポートに転送すると、受信したエラーメッセージが表示されます。

非リスニングポートにポートを転送してsshを実行すると(例:ssh -L1234:127.0.0.1:9999 10.0.0.1-10.0.0.1のプロセスが127.0.0.1のポート9999にバインドされていない場合)、同じエラーが発生します。

channel 2: open failed: administratively prohibited: open failed

-vvvsshに追加することで、どのチャンネルが参照されているかを知ることができます

ssh -vvv -L1570:127.0.0.1:8899 root@thehost

「他のプロセス」がリッスンしてnetstat -tulpnいるポート(およびIPアドレス)は、サーバー上のどのポートとIPプロセスが使用しているかを確認します。-Lはリッスンしているアドレスとポートを指す必要があります。


上記を再現できません。これを取得するために、クライアントまたはサーバー、あるいはその両方でsshパラメーターを有効にしますか?
slm

いいえ(両側の標準の「すぐに使える」構成)。私が解決できる限りconnect failed: Connection refused、ファイアウォールが接続を拒否したときに得られます。 administratively prohibited: open failedファイアウォールのないホスト上にあります。
Dravスローン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.