Назад | Перейти на главную страницу

SSH-туннель: канал 3: не удалось открыть: административно запрещено

У меня есть два сервера, скажем, сервер A и сервер B. Я хочу использовать сервер B в качестве туннеля ssh, поэтому на сервере A я сделал это

ssh -D 1080 root@ip

Он подключается, и как только я устанавливаю сервер B в качестве прокси-сервера SOCKS5 на свой сервер A, сервер B выдает этот erorr:

channel 3: open failed: administratively prohibited

Каким-то образом, если я получаю сервер B от хоста, такого как vultr, я не получаю эту ошибку, но если я получаю ее от digitalocean, я получаю эту ошибку. Я провел небольшое исследование и увидел, что я должен разрешить tcpforwarding быть да, но я не смог найти его в / 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,umac-64@openssh.com,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

Файл конфигурации, который необходимо отредактировать, называется sshd_config вы написали ssh_config. То, что вы перечислили, похоже на содержимое конфигурации по умолчанию ssh-клиента, а не на конфигурацию ssh-сервера (/etc/ssh/sshd_config)

Вы перечисляете просто закомментированные значения по умолчанию.

Итак, вы можете добавить ниже Host * что-то вроде:

AllowTcpForwarding local

Обратите внимание, что по умолчанию должно быть yes, поэтому странно, что это не работает. Вы можете добавить больше подробностей с помощью ssh -v или -vv или -vvv и посмотрите файл журнала sshd вашего сервера, который должен предоставить больше информации о том, что не так.

Сначала проверьте записи в /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) и наблюдайте за обеими сторонами соединения.

Вероятно, вам нужно установить AllowTcpForwarding yes в sshd_config на сервере, чтобы это произошло.