以下の例では、チャネル番号は何に対応していますか?サーバー上にあるのはどれですか?どちらがクライアントにありますか?
$ 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以外の別のプロセスのポート転送を設定しようとしています。上記のようなエラーメッセージが表示されるので、エラーメッセージの意味を理解しようとしています。
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
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
Sshに-vvv
を追加すると、どのチャネルが参照されているかを確認できます
ssh -vvv -L1570:127.0.0.1:8899 root@thehost
どのポートが "他のプロセス"をリッスンしている(およびどのIPアドレスで)か、netstat -tulpn
は、サーバー上のどのポートとIPプロセスが使用しているかを確認します。-Lは、アドレスとポートをポイントする必要があります聞いています。