У меня есть два сервера, скажем, сервер 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
на сервере, чтобы это произошло.