当我打开这个 ssh 隧道时:
ssh -nXNT -p 22 localhost -L 0.0.0.0:8984:remote:8983
当尝试访问 localhost:8984 上运行的 HTTP 服务器时,我收到此错误:
channel 1: open failed: administratively prohibited: open failed
此错误是什么意思?您可以在哪台机器上解决该问题?
答案1
通道 1:打开失败:管理禁止:打开失败
上述消息表示您的 SSH 服务器拒绝了 SSH 客户端打开侧通道的请求。这通常来自-D
、-L
或-w
,因为需要 SSH 流中的单独通道来传送转发的数据。
由于您正在使用-L
(也适用于-D
),因此有两个相关选项导致您的 SSH 服务器拒绝此请求:
AllowTcpForwarding
(正如史蒂夫·布佐纳斯提到的)PermitOpen
这些选项可以在 中找到/etc/ssh/sshd_config
。您应该确保:
AllowTCPForwarding
要么不存在,要么被注释掉,要么被设置为yes
PermitOpen
不存在、被注释掉或设置为any
[1]
此外,如果您使用 SSH 密钥进行连接,则应检查与您的 SSH 密钥相对应的条目中~/.ssh/authorized_keys
是否没有no-port-forwarding
或permitopen
语句[2]。
PermitTunnel
如果您尝试使用 -w 选项,则该选项与您的特定命令无关,但也与本主题有些相关。
- [1] 完整语法
sshd_config(5)
联机帮助页。 - [2] 完整语法
authorized_keys(5)
联机帮助页。
答案2
在一个非常奇怪的情况下,我在尝试创建本地隧道时也遇到了这个错误。我的命令是这样的:
ssh -L 1234:localhost:1234 user@remote
问题是,在远程主机上,/etc/hosts
没有“localhost”条目,因此 ssh 服务器不知道如何设置隧道。对于这种情况,这是一个非常不友好的错误消息;很高兴我终于明白了。
经验教训:确保隧道的目标主机名可由远程主机通过 DNS 或/etc/hosts
.
答案3
至少一个答案是由于某种原因无法使用 ssh 访问“远程”机器。该错误消息简直是荒谬的。
答案4
ControlPath
当您使用 ssh 选项并ControlMaster
共享一个套接字连接以在多个客户端连接(从一个客户端到同一 user@server)之间重用时,肯定会弹出此错误。打开太多(无论这意味着什么,在我的情况下约为 20 个连接)会产生此消息。关闭所有以前的连接可以让我打开新的连接,再次达到限制。