Nei*_*eil 241 ssh ssh-tunneling port-forwarding
当我打开这个 ssh 隧道时:
ssh -nXNT -p 22 localhost -L 0.0.0.0:8984:remote:8983
Run Code Online (Sandbox Code Playgroud)
尝试访问在 localhost:8984 上运行的 HTTP 服务器时出现此错误:
channel 1: open failed: administratively prohibited: open failed
Run Code Online (Sandbox Code Playgroud)
这个错误是什么意思,你可以在哪台机器上解决这个问题?
hyp*_*air 172
通道 1:打开失败:管理禁止:打开失败
上面的消息是指您的 SSH 服务器拒绝了您的 SSH 客户端打开侧信道的请求。这通常来自-D,-L或-w,作为SSH流中分离的通道都需要运送穿过转发的数据。
由于您正在使用-L(也适用于-D),因此有两个选项会导致您的 SSH 服务器拒绝此请求:
AllowTcpForwarding (正如史蒂夫·布佐纳斯(Steve Buzonas)所提到的)PermitOpen这些选项可以在 中找到/etc/ssh/sshd_config。您应该确保:
AllowTCPForwarding 要么不存在,要么被注释掉,要么被设置为 yesPermitOpen要么不存在,要么被注释掉,要么被设置为any[1]此外,如果您使用 SSH 密钥进行连接,您应该检查与您的 SSH 密钥对应的条目~/.ssh/authorized_keys是否没有no-port-forwarding或permitopen语句[2]。
PermitTunnel如果您尝试使用 -w 选项,则该选项与您的特定命令无关,但也与本主题有些相关。
[1]sshd_config(5)联机帮助页中的完整语法。
[2]authorized_keys(5)联机帮助页中的完整语法。
cob*_*lla 67
在一个非常奇怪的情况下,我在尝试创建本地隧道时也遇到了这个错误。我的命令是这样的:
ssh -L 1234:localhost:1234 user@remote
Run Code Online (Sandbox Code Playgroud)
问题是,在远程主机上,/etc/hosts没有“localhost”的条目,所以 ssh 服务器不知道如何设置隧道。对于这种情况,非常不友好的错误消息;很高兴我终于想通了。
教训:确保远程主机可以通过 DNS 或/etc/hosts.
Nei*_*eil 28
至少有一个答案是,由于某种原因,使用 ssh 无法访问“远程”机器。错误信息是荒谬的。
小智 21
如果无法在服务器上解析“远程”,您将收到该错误。替换为 IP 地址,看看是否能解决您的问题...
(与 Neil 的答案基本相同 - 但我确实发现这是我这边的问题)[我的文件中有机器名称的别名~/.ssh/config- 而远程机器对该别名一无所知......
小智 12
当您使用 ssh 选项ControlPath并ControlMaster共享一个套接字连接以在多个客户端连接(从一个客户端到同一用户@服务器)之间重用时,此错误最终会弹出。打开太多(不管它意味着什么,在我的情况下大约有 20 个连接)会产生此消息。关闭任何以前的连接让我打开更新,再次达到限制。
就我而言,我不得不替换localhost为127.0.0.1:
ssh -L 1234:localhost:3389 user@remote
Run Code Online (Sandbox Code Playgroud)
使其工作。
我试图rdesktop -L localhost:1234按照亚马逊关于通过 SSH 隧道连接到 AWS EC2的说明进行操作。我曾尝试根据/etc/ssh/sshd_config投票最高的答案进行更改(客户端和服务器都运行 Ubuntu 16.04 LTS)。我还检查了localhost位于/etc/hosts两侧。
直到我将ssh命令本身更改为:
ssh -L 1234:127.0.0.1:3389 user@remote
Run Code Online (Sandbox Code Playgroud)
“管理禁止”是一个特定的 ICMP 消息标志,可归结为“管理员明确希望阻止此连接”。
检查您的 iptables 设置。
小智 7
这也会发生在/etc/sshd_config有
AllowTcpForwarding no
Run Code Online (Sandbox Code Playgroud)
放。将其切换yes为允许 TCP 转发。
我非常惊讶没有人提到这可能是 DNS 问题。
journalctl -f
channel 3: open failed: administratively prohibited: open failed
Mar 10 15:24:57 hostname sshd[30303]: error: connect_to user@example.com: unknown host (Name or service not known)
Run Code Online (Sandbox Code Playgroud)
如果remote无法解析,或者您输入了一个未知的语法,就像我在这里所做的那样,我已经将 a 添加user@到端口转发逻辑(这将不起作用),则可能会出现这种情况。
另一个可能的线索
我在使用~/.ssh/authorized_keyswith 时遇到了同样的问题permitopen。
当我autossh用来创建隧道时,我需要两个端口:
这给了我一个与监控端口类似的问题:
autossh -M 10001 -o GatewayPorts=yes -o ServerAliveInterval=60 -o TCPKeepAlive=yes -T -N -R :10000:localhost:22 -i ~/.ssh/id_rsa user@remote
Run Code Online (Sandbox Code Playgroud)
我收到了这条消息(10 分钟后):
channel 2: open failed: administratively prohibited: open failed
Run Code Online (Sandbox Code Playgroud)
我的/var/log/auth.log包含:
Received request to connect to host 127.0.0.1 port 10001, but the request was denied.
Run Code Online (Sandbox Code Playgroud)
在我的~/.ssh/authorized_keys(远端)我有这个:
command="/home/user/tunnel",no-X11-forwarding,no-pty,permitopen="localhost:10000",permitopen="localhost:10001" ssh-rsa AAAA...
Run Code Online (Sandbox Code Playgroud)
我通过替换localhost实例解决了这个问题127.0.0.1:
command="/home/user/tunnel",no-X11-forwarding,no-pty,permitopen="127.0.0.1:10000",permitopen="127.0.0.1:10001" ssh-rsa AAAA...
Run Code Online (Sandbox Code Playgroud)
SSH 似乎不明白这localhost是 的快捷方式127.0.0.1,因此消息 inauth.log和管理上禁止的消息。
我在这里理解的是,管理上的意思是“由于服务器端的特定配置”。