SSH 隧道:通道 3:打开失败:管理禁止

SSH 隧道:通道 3:打开失败:管理禁止

我有两台服务器,假设是服务器 A 和服务器 B。我希望使用服务器 B 作为 ssh 隧道,因此在服务器 AI 上执行了此操作

ssh -D 1080 root@ip

它连接了,当我在服务器 A 上将服务器 B 作为 SOCKS5 代理放入时,服务器 B 就会出现此错误:

channel 3: open failed: administratively prohibited

不知何故,如果我从 vultr 这样的主机获取服务器 B,我不会收到此错误,但如果我从 digitalocean 获取,我会收到此错误。我做了一些研究,发现我应该将 allowtcpforwarding 设置为是,但我在 /etc/ssh/ssh_config 中找不到它

这是我的 ssh_config 文件:

# Host *
#   ForwardAgent no
#   ForwardX11 no
#   RhostsRSAAuthentication no
#   RSAAuthentication yes
#   PasswordAuthentication yes
#   HostbasedAuthentication no
#   GSSAPIAuthentication no
#   GSSAPIDelegateCredentials no
#   GSSAPIKeyExchange no
#   GSSAPITrustDNS no
#   BatchMode no
#   CheckHostIP yes
#   AddressFamily any
#   ConnectTimeout 0
#   StrictHostKeyChecking ask
#   IdentityFile ~/.ssh/identity
#   IdentityFile ~/.ssh/id_rsa
#   IdentityFile ~/.ssh/id_dsa
#   IdentityFile ~/.ssh/id_ecdsa
#   IdentityFile ~/.ssh/id_ed25519
#   Port 22
#   Protocol 2
#   Cipher 3des
#   Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
#   MACs hmac-md5,hmac-sha1,[email protected],hmac-ripemd160
#   EscapeChar ~
#   Tunnel no
#   TunnelDevice any:any
#   PermitLocalCommand no
#   VisualHostKey no
#   ProxyCommand ssh -q -W %h:%p gateway.example.com
#   RekeyLimit 1G 1h

如果有人能告诉我我做错了什么,我将不胜感激:3

答案1

您需要编辑的配置文件名为sshd_config您编写的ssh_config。您列出的内容看起来像是 ssh 客户端默认配置的内容,而不是 ssh 服务器的配置(/etc/ssh/sshd_config)

答案2

您列出的只是注释掉的默认值。

因此您可以添加如下Host *内容:

AllowTcpForwarding 本地

请注意,yes 应该是默认值,所以它不起作用很奇怪。您可以使用ssh -v-vv或添加更多详细信息-vvv,并查看服务器 sshd 日志文件,该文件应该提供有关错误的更多信息。

答案3

您可能需要AllowTcpForwarding yessshd_config服务器上进行设置以允许这种情况发生。

答案4

首先,检查是否存在/var/log/secure类似这样的条目;

Feb  1 19:59:58 vps001 sshd[30375]: error: connect_to 
www.somenonexistingdomain.com: unknown host (Name or service not known)

第二,检查selinux是否阻塞;(如果你是基于RedHat的)

$ sudo ausearch -m avc -c httpd
----
time->Sat Jan  6 08:58:11 2018
type=AVC msg=audit(1515229091.030:7212): avc:  denied  { map } for  pid=20581 comm="httpd" path="/var/

您可以像这样测试并禁用 selinux;

[~] $ sudo getenforce
Enforcing

[~] $ sudo setenforce Permissive

[~] $ sudo getenforce
Permissive

然后测试一下它是否能正常工作。

[~] $ sudo setenforce Enforcing

open failed: administratively prohibited如果服务器无法连接到您在另一端请求的站点,我就会出现这种情况。

www.somenotexistingdomain.com例如,如果我通过 socks 5 代理发送请求ssh -S none -D1083 -vvv my.cheap.vps.com,则会导致以下输出;

debug1: Connection to port 1083 forwarding to socks port 0 requested.
debug2: fd 10 setting TCP_NODELAY
debug2: fd 10 setting O_NONBLOCK
debug3: fd 10 is O_NONBLOCK
debug1: channel 4: new [dynamic-tcpip]
....
debug2: channel 4: dynamic request: socks5 host www.somenonexistingdomain.com port 80 command 1
debug3: send packet: type 90
debug3: receive packet: type 92
channel 4: open failed: administratively prohibited: open failed
debug2: channel 4: zombie
debug2: channel 4: garbage collecting
debug1: channel 4: free: direct-tcpip: listening port 1083 for www.somenonexistingdomain.com port 80, connect from 127.0.0.1 port 42598 to 127.0.0.1 port 1083, nchannels 22

并且您会发现它无法连接。

如果您确定您尝试访问的服务器存在;例如,首先测试您是否可以从命令行远程wget访问该站点。curl

$ wget -S -O - www.bbc.co.uk > /dev/null
Resolving www.bbc.co.uk (www.bbc.co.uk)... 212.58.244.69, 212.58.246.93
Connecting to www.bbc.co.uk (www.bbc.co.uk)|212.58.244.69|:80... connected.
HTTP request sent, awaiting response... 
HTTP/1.1 301 Moved Permanently
Server: nginx

如果这不起作用,那么如果您转发到代理 DNS,则远程服务器可能无法解析 DNS。因此请检查;

$ dig www.bbc.co.uk +short
www.bbc.net.uk.
212.58.246.91
212.58.244.67

并且还使用 netcat、telnet 等检查与端口的直接连接。但是,使用 wget 拉取站点应该已经测试了 tcp 连接和 DNS。

$ telnet www.bbc.co.uk 80
Trying 212.58.244.26...
Connected to www.bbc.co.uk.
Escape character is '^]'.

并检查 /var/log/secure 文件中的条目。

否则,请立即启动日志记录程序 ( ssh -vvvvvvv),并观察连接的两侧。

相关内容