在下面的示例中,通道号对应什么?哪些在服务器上?哪些是在客户端?
$ 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 必须指向它正在侦听的地址和端口。