ssh 错误消息中的通道号指的是什么?

ssh 错误消息中的通道号指的是什么?

在下面的示例中,通道号对应什么?哪些在服务器上?哪些是在客户端?

  $ 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 配置文件包含以下两行:

# 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 设置端口转发,并且收到与上面类似的错误消息,因此我试图理解错误消息的含义。

答案1

来自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

答案2

如果 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

-vvv您可以通过添加到您的 ssh来找出正在引用的频道

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

“其他进程”正在侦听哪个端口(以及哪些 IP 地址),netstat -tulpn将确认服务器上的进程正在使用哪些端口和 IP,-L 必须指向它正在侦听的地址和端口。

相关内容