web-dev-qa-db-ja.com

SSHトンネル:チャネル3:オープン失敗:管理上禁止

サーバーが2つあり、サーバーAとサーバーBがあるとします。サーバーBをSSHトンネルとして使用したいので、サーバーAでこれを行いました。

ssh -D 1080 root@ip

接続し、サーバーBをSOCKS5プロキシとしてサーバーAに配置するとすぐに、サーバーBが次のエラーを引き起こします。

channel 3: open failed: administratively prohibited

VultrのようなホストからサーバーBを取得した場合、このエラーは発生しませんが、digitaloceanから取得した場合は、このエラーが発生します。私はいくつかの調査を行い、tcpforwardingをyesにする必要があることを確認しましたが、/ 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
user445735

編集する必要がある設定ファイルはsshd_configと呼ばれ、あなたが書いたssh_configです。リストしたものは、sshサーバーの構成ではなく、sshクライアントのデフォルト構成の内容のように見えます(/etc/ssh/sshd_config)

1
Chris Hill

あなたがリストするものは、コメントアウトされた単なるデフォルト値です。

したがって、Host *の下に次のように追加できます。

AllowTcpForwarding local

Yesがデフォルトであるべきであるので、それが動作しないのは奇妙であることに注意してください。 ssh -vまたは-vvまたは-vvvを使用して詳細度を追加し、サーバーのsshdログファイルを調べて、何が問題なのかについてより多くの情報を提供する必要があります。

1
Patrick Mevzek

これを可能にするには、サーバーのAllowTcpForwarding yessshd_configを設定する必要があります。

0
Pauska Sock

最初に、/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の動作になります。

たとえば、Socks 5プロキシwww.somenotexistingdomain.comを介して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)、接続の両側を監視します。

0
Tom H