当我打开此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
此错误是什么意思,您可以在哪台计算机上解决此问题?
remote
”。
当我打开此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
此错误是什么意思,您可以在哪台计算机上解决此问题?
remote
”。
Answers:
渠道1:打开失败:管理员禁止:打开失败
以上消息是指您的SSH服务器拒绝了SSH客户端打开边通道的请求。这通常来自-D
,-L
或-w
,作为SSH流中分离的通道都需要跨渡的转发数据。
由于您正在使用-L
(也适用于-D
),因此有两个问题正在导致您的SSH服务器拒绝该请求:
AllowTcpForwarding
(如史蒂夫·布佐纳斯(Steve Buzonas)所述)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)
联机帮助页中的完整语法。
lxc.cgroup.devices.allow = c 10:200 rwm
到容器的配置中,并确保如果/dev/net/tun
不存在,请 mknod /dev/net/tun c 10 200; chmod 666 /dev/net/tun
在容器的启动时运行。
AllowTcpForwarding
允许您通过SSH转发TCP端口,这是-L 0.0.0.0:8984:remote:8983
参数所请求的。如果AllowTcpForwarding
设置为no
,SSH将拒绝端口转发请求,从而导致您看到该错误。
AllowTCPForwarding
来AllowTcpForwarding
,但是SE希望至少6个字符改变。因此,只需注意正确的大小写就是Tcp
第一次使用的正确版本。
在一个非常奇怪的情况下,我在尝试创建本地隧道时也遇到了此错误。我的命令是这样的:
ssh -L 1234:localhost:1234 user@remote
问题是,在远程主机上,/etc/hosts
没有用于“ localhost”的条目,因此ssh服务器不知道如何设置隧道。这种情况下非常不友好的错误消息;很高兴我终于明白了。
课程:确保远程主机可以通过DNS或解析隧道的目标主机名/etc/hosts
。
user@remote
),然后从远端设置到列出的目标主机的隧道(在上面的命令中为localhost
)。这样做时,它将在远程主机上使用主机名解析方案。因此,如果您通过SSH登录的计算机无法解析localhost
,则会收到此错误消息。
至少一个答案是由于某种原因,ssh无法访问计算机“ remote”。错误消息只是荒谬的。
当您使用ssh选项ControlPath
并ControlMaster
共享一个套接字连接以在多个客户端连接(从一个客户端到同一user @ server)之间重用时,将明确弹出此错误。打开太多(在我的情况下,〜20个连接意味着什么)会产生此消息。关闭以前的所有连接,就可以再打开一次,达到上限。
MaxSession
而是MaxSessions
。虽然也有一些保护,不破坏你的SSH服务器的配置...
“管理员禁止”是特定的ICMP消息标志,其归结为“管理员明确希望此连接被阻止”。
检查您的iptables设置。
ssh
没有逻辑来确定连接失败的原因,它只是假设如果您尝试连接,则该连接存在,并且如果您无法到达该连接,则必须故意阻止了该连接。
另一个可能的线索
使用时~/.ssh/authorized_keys
,我遇到了同样的问题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
我收到了该消息(10分钟后):
channel 2: open failed: administratively prohibited: open failed
我的/var/log/auth.log
包含:
Received request to connect to host 127.0.0.1 port 10001, but the request was denied.
在我~/.ssh/authorized_keys
(远端),我有这个:
command="/home/user/tunnel",no-X11-forwarding,no-pty,permitopen="localhost:10000",permitopen="localhost:10001" ssh-rsa AAAA...
我通过将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...
似乎SSH无法理解这localhost
是的捷径127.0.0.1
,因此消息auth.log
和管理上禁止的消息。
我在这里了解的是,管理上的含义是“由于服务器端的特定配置”。
就我而言,我必须替换localhost
为127.0.0.1
:
ssh -L 1234:localhost:3389 user@remote
使它工作。
我试图rdesktop -L localhost:1234
遵循Amazon 关于通过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
需要一些故障排除活动才能找到明确的答案:
我将远程放置在-L参数中时遇到了这个错误,而且0.0.0.0是多余的,您可以忽略它以得到相同的结果,并且我认为您应该添加-g使其起作用。
这是我用于隧道的行: ssh -L 8983:locahost:8984 user@remote -4 -g -N
-4 tells to use only ipv4
-g Allows remote hosts to connect to local forwarded ports.
-N Do not execute a remote command. This is useful for just forwarding ports (protocol version 2 only). I use this to clog the terminal so I don't forget to close it since generally I need the tunnels temporarily.
这也可能是由于无法绑定到本地端上的端口所致。
ssh -Nn -L 1234:remote:5678 user@remote
此命令试图绑定本地计算机上的侦听端口1234,该端口映射到远程计算机上端口5678上的服务。
如果本地计算机上的端口1234已被另一个进程使用(可能是后台ssh -f会话),则ssh将无法侦听该端口,并且隧道将失败。
问题在于此错误消息可能意味着多种含义,并且“行政上禁止”有时会给出错误的想法。因此,除了检查DNS,本地与远程之间的防火墙以及sshd_config外,还要检查本地端口是否已被使用。采用
lsof -ti:1234
以确定在1234上正在运行的进程。对于lsof,您可能需要sudo才能列出其他用户拥有的进程。那你可以用
ps aux | grep <pid>
找出那个过程是什么。
要在一个命令中获得所有这些:
ps aux | grep "$(sudo lsof -ti:1234)"
就我而言,问题是由于在服务器旨在强行更改我的帐户的同时请求没有外壳访问权限的隧道。由于缺少外壳,我看不到它,只收到了错误
channel 2: open failed: administratively prohibited: open failed
我的隧道配置如下:
ssh -p [ssh-port] -N -f -L [local-port]:127.0.0.1:[remote-port]
[server-address]
直接登录到服务器时显示错误(不带-N -f):
WARNING: Your password has expired. You must change your password now
and login again!
我通过使用shell访问权限登录并更改了密码来解决了该问题。然后,我可以简单地使用隧道,而无需再次访问shell。
检查/etc/resolv.conf
您要访问的服务器上是否为空ssh
。几次我发现这与一个空/etc/resolv.conf
文件有关
如果不是root用户,则可以通过在公共主机名上尝试一些ping
或telnet
(80)来检查服务器,即:
root@bananapi ~ # telnet www.google.com 80
telnet: could not resolve www.google.com/80: Name or service not known
将名称服务器记录添加到后/etc/resolv.conf
:
root@bananapi ~ # telnet www.google.com 80
Trying 74.125.195.104...
Connected to www.google.com.
Escape character is '^]'.
GET / HTTP/1.0
HTTP/1.0 302 Found
Location: http://www.google.ro/?gws_rd=cr&ei=8fStVZ-hMIv6UvX6iuAK
但是,您还应该检查为什么/etc/resolv.conf
为空(如果适用,通常由服务器上的dhcp客户端填充名称服务器记录)。
我在cygwin上看到了这个错误,这在Linux上也应该如此,并为我工作。在我的情况下,我已经完成ssh -ND *:1234 user@127.0.0.1,当我将浏览器连接到该comp-socks服务器时,它进行了浏览,但是在我运行该ssh命令的comp上,出现了该错误在控制台上处理每个请求-至少要访问一个站点,尽管浏览器是通过代理检索到的,或者至少在我看到主流时代的程度上如此。但是进行此更改可以摆脱失败的消息
While trying to do some SSH tunneling, here is the error I got :
channel 3: open failed: administratively prohibited: open failed
To avoid this kind of error, have a look at the SSH daemon configuration file :
/etc/ssh/sshd_config
Add possibly the following line :
root@remote-server:~# echo “PermitTunnel yes” >> /etc/ssh/sshd_config
Then, restart your sshd server :
root@remote-server:~# service ssh restart
or
root@remote-server:~# /etc/init.d/ssh restart
ACCEPT
。
AllowTCPForwarding
,您正在谈论的评论# To disable tunneled clear text
是关于PasswordAuthentication
设置为no,PermitTunnel
该设置允许通过tun / tap允许第2层或第3层网络隧道,并且默认为no。L,R和D选项使用TCP转发而不是用于隧道的设备。
我的情况:
$ssh -D 8081 localhost >>log1.txt 2>&1 &
----wait for 3 days
$tail -f log1.txt
channel 963: open failed: connect failed: Connection refused
channel 963: open failed: connect failed: Connection refused
channel 971: open failed: connect failed: Connection reset by peer
channel 982: open failed: connect failed: Connection timed out
channel 979: open failed: connect failed: Connection timed out
channel 1019: open failed: administratively prohibited: open failed
accept: Too many open files
channel 1019: open failed: administratively prohibited: open failed
accept: Too many open files
channel 1019: open failed: administratively prohibited: open failed
$ps axu | grep 8081
root 404 0.0 0.0 4244 592 pts/1 S+ 05:44 0:00 grep --color=auto 8081
root 807 0.3 0.6 8596 6192 ? S Mar17 76:44 ssh -D 8081 localhost
$lsof -p 807 | grep TCP
ssh 807 root 1013u sock 0,8 0t0 2076902 protocol: TCP
ssh 807 root 1014u sock 0,8 0t0 2078751 protocol: TCP
ssh 807 root 1015u sock 0,8 0t0 2076894 protocol: TCP
.....
$lsof -p 807 | wc -l
1047
$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 malcolm-desktop
$ssh localhost
Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-53-generic i686)
----after restart ssh -D 8081 localhost
$ lsof -p 1184 | grep TCP
ssh 1184 root 3u IPv4 2332193 0t0 TCP localhost:37742->localhost:ssh (ESTABLISHED)
ssh 1184 root 4u IPv6 2332197 0t0 TCP ip6-localhost:tproxy (LISTEN)
ssh 1184 root 5u IPv4 2332198 0t0 TCP localhost:tproxy (LISTEN)
ssh 1184 root 6u IPv4 2332215 0t0 TCP localhost:tproxy->localhost:60136 (ESTABLISHED)
ssh 1184 root 7u IPv4 2336142 0t0 TCP localhost:tproxy->localhost:32928 (CLOSE_WAIT)
ssh 1184 root 8u IPv4 2336062 0t0 TCP localhost:tproxy->localhost:32880 (CLOSE_WAIT)
/etc/ssh/sshd_config
有类似的东西:
Match Group SSHTunnel_RemoteAccessGroup
AllowTcpForwarding yes
PermitOpen=sshbeyondremote.server.com:22
但是~/.ssh/config
有:
Host remote.server.com
HostName remote.server.com
Port 10022
User useronremote
IdentityFile ~/.ssh/keys/key1/openssh.keyforremote.priv
LocalForward 2222 SSHBeyondRemote.server.com:22
请注意SSHBeyondRemote.server.com:22和sshbeyondremote.server.com:22之间大小写(大小写)的不同。
解决问题后,我再也看不到问题了。
我正在使用:
OpenSSH客户端的版本:
OpenSSH服务器的版本:
其他名称解析原因:我的/ etc / hosts的服务器名称(而不是localhost)的IP地址错误,如下所示:
127.0.0.1 localhost
192.168.2.45 server.domain.com server
但是配置的服务器IP(以及使用host / dig命令解析的DNS名称)为192.168.2.47。由先前的IP重新配置引起的简单错字。修复/ etc / hosts之后,隧道连接可以正常工作:
ssh user@server.domain.com -L 3456:127.0.0.1:5901
奇怪的是,当我在隧道中使用localhost文字IP时,实际IP导致了失败。发行版:Ubuntu 16.04 LTS。