it-swarm-id.com

Galat penerowongan SSH: "saluran 1: buka gagal: dilarang secara administratif: buka gagal"

Ketika saya membuka terowongan ssh ini:

ssh -nXNT -p 22 localhost -L 0.0.0.0:8984:remote:8983

Saya mendapatkan kesalahan ini ketika mencoba mengakses server HTTP yang berjalan di localhost: 8984:

channel 1: open failed: administratively prohibited: open failed

Apa artinya kesalahan ini, dan di mesin mana Anda dapat memperbaiki masalahnya?

210
Neil

saluran 1: terbuka gagal: dilarang secara administratif: terbuka gagal

Pesan di atas merujuk pada server SSH Anda yang menolak permintaan klien SSH Anda untuk membuka saluran samping. Ini biasanya berasal dari -D, -L Atau -w, Karena saluran terpisah dalam aliran SSH diperlukan untuk mengangkut data yang diteruskan ke seberang.

Karena Anda menggunakan -L (Juga berlaku untuk -D), Ada dua opsi yang menyebabkan server SSH Anda menolak permintaan ini:

  • AllowTcpForwarding (seperti yang disebutkan Steve Buzonas)
  • PermitOpen

Opsi ini dapat ditemukan di /etc/ssh/sshd_config. Anda harus memastikan bahwa:

  • AllowTCPForwarding tidak ada, dikomentari, atau disetel ke yes
  • PermitOpen tidak ada, dikomentari, atau disetel ke any [1]

Selain itu, jika Anda menggunakan kunci SSH untuk menghubungkan, Anda harus memeriksa apakah entri yang terkait dengan kunci SSH Anda di ~/.ssh/authorized_keys Tidak memiliki no-port-forwarding Atau permitopen pernyataan [2] .

Tidak relevan dengan perintah khusus Anda, tetapi agak relevan dengan topik ini juga, adalah opsi PermitTunnel jika Anda mencoba menggunakan opsi -w.

[1] Sintaksis penuh di sshd_config(5) manual.

[2] Sintaksis penuh di authorized_keys(5) manual.

134
hyperair

Dalam kasus yang sangat aneh, saya juga mengalami kesalahan ini ketika mencoba membuat terowongan lokal. Perintah saya kira-kira seperti ini:

ssh -L 1234:localhost:1234 [email protected]

Masalahnya adalah, pada Host remote, /etc/hosts tidak punya entri untuk "localhost" sehingga server ssh tidak tahu cara mengatur terowongan. Pesan kesalahan yang sangat tidak ramah untuk kasus ini; senang akhirnya aku menemukan jawabannya.

Pelajarannya: pastikan hostname target terowongan Anda dapat diatasi oleh Host jarak jauh, baik melalui DNS atau /etc/hosts.

55
cobbzilla

Setidaknya satu jawaban adalah bahwa mesin "remote" tidak dapat dijangkau dengan ssh karena suatu alasan. Pesan kesalahan itu tidak masuk akal.

27
Neil

Jika 'jarak jauh' tidak dapat diselesaikan di server Anda akan mendapatkan kesalahan itu. Ganti dengan alamat IP dan lihat apakah itu menyelesaikan masalah Anda ...

(Pada dasarnya jawaban yang sama dengan Neil - tapi saya pasti menemukan bahwa itu menjadi masalah di pihak saya) [Saya punya alias untuk nama mesin di file ~/.ssh/config Saya - dan mesin jarak jauh tidak tahu apa-apa tentang alias itu ...

19
jacquesjtheron

Kesalahan ini secara pasti muncul ketika Anda menggunakan opsi ssh ControlPath dan ControlMaster untuk berbagi satu koneksi soket untuk digunakan kembali di antara beberapa koneksi klien (dari satu klien ke pengguna yang sama @ server). Membuka terlalu banyak (apa pun artinya, dalam kasus saya ~ 20 koneksi) menghasilkan pesan ini. Menutup koneksi sebelumnya memungkinkan saya membuka yang lebih baru, lagi hingga batasnya.

11
Matej Kovac

"Dilarang secara administratif" adalah tanda pesan ICMP khusus yang bermuara pada "Administrator secara eksplisit ingin koneksi ini diblokir".

Periksa pengaturan iptables Anda.

8
Shadur

Dalam kasus saya, saya harus mengganti localhost dengan 127.0.0.1 di:

ssh -L 1234:localhost:3389 [email protected]

untuk membuatnya bekerja.

Saya berusaha rdesktop -L localhost:1234 mengikuti Amazon instruksi tentang menghubungkan ke AWS EC2 melalui tunneling SSH . Saya telah mencoba mengubah /etc/ssh/sshd_config (klien dan server menjalankan Ubuntu 16.04 LTS) per jawaban yang dipilih tertinggi. Saya juga memeriksa bahwa localhost ada di /etc/hosts di kedua sisi.

Tidak ada yang berhasil sampai saya mengubah perintah ssh menjadi:

ssh -L 1234:127.0.0.1:3389 [email protected]
6
tinlyx

Masalah serupa

Kemungkinan memimpin lainnya

Saya memiliki masalah yang sama menggunakan ~/.ssh/authorized_keys Dengan permitopen.

Karena saya menggunakan autossh untuk membuat terowongan, saya memerlukan dua port:

  • satu untuk koneksi (10000),
  • satu untuk pemantauan (10001).

Di sisi klien

Ini memberi saya masalah yang sama dengan port pemantauan:

autossh -M 10001 -o GatewayPorts=yes -o ServerAliveInterval=60  -o TCPKeepAlive=yes -T -N -R :10000:localhost:22 -i ~/.ssh/id_rsa [email protected]

Saya mendapat pesan itu (setelah 10 menit):

channel 2: open failed: administratively prohibited: open failed

Di sisi terpencil

/var/log/auth.log Saya berisi:

Received request to connect to Host 127.0.0.1 port 10001, but the request was denied.

Di ~/.ssh/authorized_keys Saya (sisi jauh) saya punya ini:

command="/home/user/tunnel",no-X11-forwarding,no-pty,permitopen="localhost:10000",permitopen="localhost:10001" ssh-rsa AAAA...

Bagaimana mengatasinya

Saya menyelesaikan ini dengan mengganti localhost instance dengan 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...

Tampaknya SSH tidak mengerti bahwa localhost adalah jalan pintas ke 127.0.0.1, Maka pesan dalam auth.log Dan secara administratif dilarang pesan.

Apa yang saya pahami di sini adalah bahwa secara administratif berarti "karena konfigurasi khusus pada sisi server".

5
lauhub

Ini juga terjadi ketika /etc/sshd_config telah

AllowTcpForwarding no 

set. Alihkan ke yes untuk mengizinkan penerusan TCP.

4
user578125

Saya mendapat kesalahan ini sekali untuk meletakkan remote di parameter -L, juga 0.0.0.0 yang berlebihan Anda dapat menghilangkannya dengan hasil yang sama, dan saya pikir Anda harus menambahkan -g agar berfungsi.

Ini adalah baris yang saya gunakan untuk tunneling: ssh -L 8983:locahost:8984 [email protected] -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.
3
Marciano

Beberapa aktivitas pemecahan masalah diperlukan untuk menemukan jawaban yang pasti:

  • periksa apakah penerusan port diaktifkan dalam konfigurasi ssh pengguna,
  • aktifkan verbosity of ssh (-v),
  • periksa ssh log pada Host lokal dan log aman di remote,
  • menguji port jarak jauh yang berbeda,
  • periksa pengaturan iptables Anda (seperti yang dikatakan Shadur).
3
Marco Solieri

Ini juga dapat disebabkan karena tidak dapat mengikat ke port di sisi lokal.

ssh -Nn -L 1234:remote:5678 [email protected]

Perintah ini mencoba mengikat port mendengarkan 1234 pada mesin lokal, yang memetakan ke layanan pada port 5678 pada mesin jarak jauh.

Jika port 1234 pada mesin lokal sudah digunakan oleh proses lain, (mungkin sesi ssh -f latar belakang), maka ssh tidak akan dapat mendengarkan pada port itu dan terowongan akan gagal.

Masalahnya adalah bahwa pesan kesalahan ini dapat berarti beberapa hal, dan "dilarang secara administratif" terkadang memberikan ide yang salah. Jadi selain memeriksa DNS, firewall antara lokal dan jarak jauh, dan sshd_config, periksa untuk melihat apakah port lokal sudah digunakan. Menggunakan

lsof -ti:1234

untuk mengetahui proses apa yang sedang berjalan pada 1234. Anda mungkin perlu Sudo untuk lsof mendaftar proses yang dimiliki oleh pengguna lain. Maka Anda bisa menggunakannya

ps aux | grep <pid>

untuk mengetahui apa proses itu.

Untuk mendapatkan ini semua dalam satu perintah:

ps aux | grep "$(Sudo lsof -ti:1234)"
3
Mnebuerquo

Dalam kasus saya, masalahnya adalah karena meminta terowongan tanpa akses Shell sementara server bertujuan untuk memaksa perubahan kata sandi di akun saya. Karena kurangnya Shell, saya tidak bisa melihat itu dan hanya menerima kesalahan

channel 2: open failed: administratively prohibited: open failed  

Konfigurasi terowongan saya adalah sebagai berikut:

ssh -p [ssh-port] -N -f -L [local-port]:127.0.0.1:[remote-port]
[server-address]

Kesalahan ditampilkan saat masuk langsung ke server (tanpa -N -f):

WARNING: Your password has expired. You must change your password now
and login again!

Saya menyelesaikan masalah dengan masuk dengan akses Shell dan mengubah kata sandi. Maka saya bisa menggunakan terowongan tanpa akses Shell lagi.

2
Pieter Van Gorp

Saya sangat terkejut bahwa tidak ada yang menyebutkan bahwa ini mungkin masalah DNS.

journalctl -f
channel 3: open failed: administratively prohibited: open failed
Mar 10 15:24:57 hostname sshd[30303]: error: connect_to [email protected]: unknown Host (Name or service not known)

Ini mungkin disajikan jika remote tidak dapat diselesaikan atau Anda telah memasukkan sintaks yang tidak dikenal seperti yang saya lakukan di sini di mana saya telah menambahkan [email protected] ke logika port-forward (yang tidak akan berfungsi).

2
Torxed

Saya memiliki pesan yang sama ketika mencoba melakukan tunnel. Ada masalah dengan server dns di sisi jarak jauh. Masalahnya terpecahkan ketika kembali bekerja.

2

Saya memiliki masalah ini ketika mencoba terhubung melalui SSH dengan pengguna yang hanya diizinkan terhubung menggunakan SFTP.

Misalnya, ini ada di server /etc/ssh/sshd_config:

Match group sftponly
    ForceCommand internal-sftp
    ChrootDirectory /usr/chroot/%u
    [...]
Match

Jadi dalam hal ini, untuk menggunakan SSH, Anda harus menghapus pengguna dari grup sftponly yang setara atau terhubung menggunakan pengguna yang tidak terbatas pada SFTP.

1
Mike

Saya mendapatkan pesan yang sama saat SSH melakukan tunneling ke Debian. Ternyata sistem jarak jauh tidak memiliki ruang kosong. Setelah membebaskan beberapa ruang disk dan mem-boot ulang, terowongan mulai berfungsi.

1
SlavaSt

Periksa apakah /etc/resolv.conf Kosong di server tujuan Anda ssh-. Beberapa kali saya menemukan ini terkait dengan file /etc/resolv.conf Kosong

Jika bukan root, Anda bisa memeriksa server dengan mencoba beberapa ping atau telnet (80) pada nama host publik, yaitu:

[email protected] ~ # telnet www.google.com 80
telnet: could not resolve www.google.com/80: Name or service not known

Setelah menambahkan catatan server nama ke /etc/resolv.conf:

[email protected] ~ # 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

Namun, Anda juga harus memeriksa mengapa /etc/resolv.conf Kosong (ini biasanya diisi dengan catatan server nama oleh klien dhcp di server, jika berlaku.

1
Ender

Saya mendapatkan kesalahan ini saat menulis entri ini di blog saya :

/etc/ssh/sshd_config punya sesuatu seperti:

Match Group SSHTunnel_RemoteAccessGroup
    AllowTcpForwarding yes
    PermitOpen=sshbeyondremote.server.com:22

Tapi ~/.ssh/config telah:

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

Perhatikan perbedaan dalam case (kapitalisasi) antara SSHBeyondRemote.server.com:22 dan sshbeyondremote.server.com:22.

Setelah saya memperbaiki kasus ini, saya tidak lagi melihat masalahnya.

Saya menggunakan:

Versi klien OpenSSH:

  • OpenSSH_7.2p2 Ubuntu-4ubuntu2.4, OpenSSL 1.0.2g 1 Mar 2016

Versi server OpenSSH:

  • OpenSSH_7.6p1 Debian-4, OpenSSL 1.0.2n 7 Des 2017
0
Zach Pfeffer

Saya melihat kesalahan ini pada cygwin dan ini juga berlaku untuk linux dan bekerja untuk saya. Dalam kasus saya, saya telah melakukan ssh -ND *: 1234 [email protected] dan ketika saya menghubungkan browser ke server comp-socks itu, browser tersebut meramban, tetapi pada komputer tempat saya menjalankan perintah ssh tersebut, saya mendapatkan kesalahan yang muncul pada konsol dengan setiap permintaan - setidaknya untuk satu situs, meskipun browser mengambilnya melalui proxy atau sepertinya, setidaknya sejauh saya melihat usia utama. Tetapi melakukan perubahan ini menghilangkan pesan yang gagal

http://linuxindetails.wordpress.com/2010/02/18/channel-3-open-failed-administratively-prohibited-open-failed/

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 :
[email protected]:~# echo “PermitTunnel yes” >> /etc/ssh/sshd_config
Then, restart your sshd server :
[email protected]:~# service ssh restart
or

[email protected]:~# /etc/init.d/ssh restart
0
barlop

Sedikit tambahan pada salah satu komentar di atas: "Kegagalan resolusi DNS dapat menyebabkan kesalahan ini" - juga pastikan Anda mengeja nama host Anda dengan benar.

Saya baru saja menghabiskan lebih dari satu jam mencoba men-debug semua pengaturan ssh dan ternyata saya baru saja salah mengeja amazonaws dalam perintah yang setara dengan catatan kegagalan resolusi DNS di atas.

0
Brad Dwyer

Firmware router Asus RT68U (Asus Merlin) memiliki pengaturan yang memungkinkan penerusan port SSH, yang harus diaktifkan:

enter image description here

Penerusan port dinamis diatur seperti yang dijelaskan di: Pemecahan masalah terowongan dinamis

0
gatorback

Alasan mengapa saya memiliki pesan itu bukanlah yang paling umum, tetapi perlu disebutkan. Saya telah membuat skrip daftar terowongan, dan untuk memastikan presentasi kolom, saya telah mencetak setiap byte terakhir pada dua byte. Ketika saya mencoba membuka penerusan terowongan ke 192.168.66.08, selalu gagal, karena '08' ditafsirkan oleh gethostbyaddr sebagai angka oktal yang tidak valid :)

0

Periksa router Anda untuk Pembaruan DNS perlindungan. Router saya (pfsense) memiliki Perlindungan Rebinding DNS Diaktifkan secara default. Itu menyebabkan kesalahan 'saluran terbuka: gagal secara administratif dilarang: buka gagal' dengan SSH

0
meffect

Tampaknya ada banyak kemungkinan penyebab utama untuk pesan ini. Dalam kasus saya itu adalah ketidakmampuan untuk mengakses remote karena saya belum memberikan keyfile dengan benar.

-L opsi menambahkan lompatan SSH implisit (efektif menggunakan Host SSH eksplisit sebagai server benteng/lompatan). Mungkin lebih mudah untuk men-debug ini dengan melakukan lompatan secara eksplisit dan membuat Shell login ke mesin target menggunakan "proxycommand".

Setelah ini berhasil, Anda dapat melakukan port forward berdasarkan localhost mesin target (dengan asumsi ia dapat masuk ke dirinya sendiri):

-N -L 1234:localhost:1234
0
nobar

Kasus saya:

$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)
0
diyism

Penyebab resolusi nama lainnya: My/etc/hosts memiliki alamat IP yang salah untuk nama server (bukan untuk localhost), seperti ini:

127.0.0.1     localhost
192.168.2.45  server.domain.com server

Tetapi IP server yang dikonfigurasi (dan nama DNS diselesaikan dengan perintah Host/Dig) adalah 192.168.2.47. Kesalahan ketik sederhana yang disebabkan oleh konfigurasi ulang IP sebelumnya. Setelah memperbaiki/etc/hosts, koneksi terowongan bekerja dengan sempurna:

ssh [email protected] -L 3456:127.0.0.1:5901

Sungguh aneh bahwa IP asli menyebabkan kegagalan ketika saya menggunakan IP localhost literal untuk terowongan. Distro: Ubuntu 16.04 LTS.

0
Fjor

Saya memiliki masalah yang sama dan saya menyadari bahwa itu adalah DNS. Lalu lintas disalurkan tetapi DNS meminta no. Cobalah untuk mengedit file host DNS Anda secara manual dan tambahkan layanan yang ingin Anda akses.

0
Data

Satu skenario lain adalah bahwa layanan yang Anda coba akses tidak berjalan. Saya mengalami masalah ini beberapa hari yang lalu hanya untuk mengingat contoh httpd yang saya coba sambungkan telah dihentikan.

Langkah-langkah Anda untuk menyelesaikan masalah akan dimulai dengan yang paling sederhana, yaitu pergi ke mesin lain dan melihat apakah Anda dapat terhubung secara lokal dan kemudian bekerja sendiri kembali ke komputer klien Anda. Setidaknya ini akan memungkinkan Anda untuk bekerja pada titik apa komunikasi tidak terjadi. Anda dapat mengambil pendekatan lain, tetapi ini yang berhasil bagi saya.

0
Andre M