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?
remote
" dalam kasus saya.Jawaban:
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 diatur keyes
PermitOpen
tidak ada, dikomentari, atau diatur keany
[1]Selain itu, jika Anda menggunakan kunci SSH untuk menghubungkan, Anda harus memeriksa apakah entri yang terkait dengan kunci SSH Anda
~/.ssh/authorized_keys
tidak adano-port-forwarding
ataupermitopen
pernyataan [2].Tidak relevan dengan perintah khusus Anda, tetapi agak relevan dengan topik ini juga, adalah
PermitTunnel
opsi jika Anda mencoba menggunakan opsi -w.[1] Sintaksis lengkap di halaman
sshd_config(5)
manual.[2] Sintaksis penuh di halaman
authorized_keys(5)
manual.sumber
lxc.cgroup.devices.allow = c 10:200 rwm
ke konfigurasi wadah Anda, dan memastikan bahwa jika/dev/net/tun
tidak ada,mknod /dev/net/tun c 10 200; chmod 666 /dev/net/tun
dijalankan saat boot dalam wadah.AllowTcpForwarding
memungkinkan Anda untuk meneruskan port TCP melalui SSH, yang merupakan-L 0.0.0.0:8984:remote:8983
parameter yang diminta. JikaAllowTcpForwarding
diatur keno
, SSH akan menolak permintaan penerusan port, menyebabkan Anda melihat kesalahan itu.AllowTCPForwarding
toAllowTcpForwarding
, tetapi SE ingin setidaknya 6 karakter diubah. Jadi, hanya mencatat bahwa case yang benar adalahTcp
versi, seperti yang digunakan dengan benar pertama kali.Dalam kasus yang sangat aneh, saya juga mengalami kesalahan ini ketika mencoba membuat terowongan lokal. Perintah saya adalah seperti ini:
Masalahnya adalah, pada host jarak jauh,
/etc/hosts
tidak memiliki entri untuk "localhost" sehingga server ssh tidak tahu cara mengatur terowongan. Pesan kesalahan yang sangat tidak ramah untuk kasus ini; senang saya akhirnya menemukan jawabannya.Pelajaran: pastikan hostname target terowongan Anda dapat diatasi oleh host jarak jauh, baik melalui DNS atau
/etc/hosts
.sumber
user@remote
), kemudian dari ujung jarak jauh, ia menyiapkan terowongan ke host target yang terdaftar (dalam perintah di atas ini adalahlocalhost
). Saat melakukan ini, ia menggunakan skema resolusi nama host pada host jarak jauh . Jadi jika mesin yang Anda masuki SSH tidak dapat menyelesaikannyalocalhost
, Anda akan mendapatkan pesan kesalahan ini.Setidaknya satu jawaban adalah bahwa mesin "jarak jauh" tidak dapat dijangkau dengan ssh karena suatu alasan. Pesan kesalahan itu tidak masuk akal.
sumber
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 menjadi masalah di pihak saya) [Saya memiliki alias untuk nama mesin di
~/.ssh/config
file saya - dan mesin jarak jauh tidak tahu apa-apa tentang itu alias ...sumber
-D
(DynamicForward) sebagai proxy SOCKS di browser. Yaitu mencoba mengakses situs web yang tidak dapat diselesaikan oleh host terowongan.Kesalahan ini secara pasti muncul ketika Anda menggunakan opsi ssh
ControlPath
danControlMaster
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.sumber
MaxSession
tapiMaxSessions
. Meskipun ada beberapa perlindungan, jangan hancurkan konfigurasi server ssh Anda ..."Dilarang secara administratif" adalah tanda pesan ICMP khusus yang bermuara pada "Administrator secara eksplisit ingin koneksi ini diblokir".
Periksa pengaturan iptables Anda.
sumber
ssh
tidak memiliki logika untuk menentukan mengapa koneksi gagal, itu hanya mengasumsikan bahwa jika Anda mencoba untuk terhubung, maka itu ada, dan jika Anda tidak bisa sampai di sana, koneksi harus diblokir dengan sengaja.Masalah serupa
Kemungkinan memimpin lainnya
Saya memiliki masalah yang sama
~/.ssh/authorized_keys
dengan menggunakanpermitopen
.Seperti yang saya gunakan
autossh
untuk membuat terowongan, saya membutuhkan dua port:Di sisi klien
Ini memberi saya masalah yang sama dengan port pemantauan:
Saya mendapat pesan itu (setelah 10 menit):
Di sisi yang jauh
/var/log/auth.log
Berisi saya :Di
~/.ssh/authorized_keys
(sisi jauh) saya, saya punya ini:Bagaimana mengatasinya
Saya memecahkan ini dengan mengganti
localhost
instance dengan127.0.0.1
:Tampaknya SSH tidak mengerti bahwa itu
localhost
adalah jalan pintas ke127.0.0.1
, karenanya pesan masukauth.log
dan pesan yang dilarang secara administratif .Apa yang saya pahami di sini adalah bahwa secara administratif berarti "karena konfigurasi khusus di sisi server".
sumber
Ini juga terjadi ketika
/etc/sshd_config
sudahset. Alihkan ke
yes
untuk memungkinkan penerusan TCP.sumber
Dalam kasus saya, saya harus mengganti
localhost
dengan127.0.0.1
di:untuk membuatnya bekerja.
Saya mencoba
rdesktop -L localhost:1234
mengikuti instruksi Amazon tentang cara menghubungkan ke AWS EC2 melalui tunneling SSH . Saya telah mencoba mengubah/etc/ssh/sshd_config
(baik klien dan server menjalankan Ubuntu 16.04 LTS) per jawaban suara tertinggi. Saya juga memeriksa yanglocalhost
ada di/etc/hosts
kedua sisi.Tidak ada yang berhasil sampai saya mengubah
ssh
perintah itu sendiri menjadi:sumber
Beberapa aktivitas pemecahan masalah diperlukan untuk menemukan jawaban yang pasti:
sumber
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 garis yang saya gunakan untuk penerowongan:
ssh -L 8983:locahost:8984 user@remote -4 -g -N
sumber
Ini juga dapat disebabkan karena tidak dapat mengikat ke port di sisi lokal.
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 gagasan yang salah. Jadi selain memeriksa DNS, firewall antara lokal dan jarak jauh, dan sshd_config, periksa untuk melihat apakah port lokal sudah digunakan. Menggunakan
untuk mengetahui proses apa yang sedang berjalan pada 1234. Anda mungkin perlu sudo agar lsof mendaftar proses yang dimiliki oleh pengguna lain. Maka Anda bisa menggunakannya
untuk mengetahui apa proses itu.
Untuk mendapatkan ini semua dalam satu perintah:
sumber
Saya memiliki pesan yang sama ketika mencoba melakukan tunnel. Ada masalah dengan server dns di sisi jarak jauh. Masalahnya terpecahkan ketika kembali bekerja.
sumber
Saya sangat terkejut bahwa tidak ada yang menyebutkan bahwa ini mungkin masalah DNS.
Ini mungkin disajikan jika
remote
tidak dapat diatasi atau Anda telah memasukkan sintaks yang tidak diketahui seperti yang saya lakukan di sini di mana saya telah menambahkanuser@
logika port-forward (yang tidak akan berfungsi).sumber
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
Konfigurasi terowongan saya adalah sebagai berikut:
Kesalahan ditampilkan saat masuk langsung ke server (tanpa -N -f):
Saya menyelesaikan masalah dengan masuk dengan akses shell dan mengubah kata sandi. Maka saya bisa menggunakan terowongan tanpa akses shell lagi.
sumber
Saya mengalami masalah ini ketika mencoba terhubung melalui SSH dengan pengguna yang hanya diizinkan terhubung menggunakan SFTP.
Misalnya, ini ada di server
/etc/ssh/sshd_config
:Jadi dalam hal ini, untuk menggunakan SSH, Anda harus menghapus pengguna dari
sftponly
grup yang setara atau terhubung menggunakan pengguna yang tidak terbatas pada SFTP.sumber
Periksa apakah
/etc/resolv.conf
kosong di server yang Anda tujussh
. Beberapa kali saya menemukan ini terkait dengan/etc/resolv.conf
file kosongJika bukan root, Anda bisa mengecek server dengan mencoba beberapa
ping
atautelnet
(80) nama host publik, yaitu:Setelah menambahkan catatan server nama ke
/etc/resolv.conf
:Namun, Anda juga harus memeriksa mengapa
/etc/resolv.conf
itu kosong (ini biasanya diisi dengan catatan server nama oleh klien dhcp di server, jika berlaku.sumber
Saya mendapatkan pesan yang sama saat SSH menyetel ke Debian. Ternyata sistem jarak jauh tidak memiliki ruang kosong. Setelah membebaskan beberapa ruang disk dan mem-boot ulang, terowongan mulai berfungsi.
sumber
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/
sumber
ACCEPT
.AllowTCPForwarding
, Komentar yang Anda bicarakan# To disable tunneled clear text
adalah sehubungan denganPasswordAuthentication
disetel ke tidak,PermitTunnel
adalah pengaturan untuk mengizinkan terowongan jaringan layer 2 atau layer 3 melalui tun / tap dan default ke no. Opsi L, R, dan D menggunakan penerusan TCP dan bukan perangkat untuk penerowongan.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 hubungkan 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.
sumber
Periksa router Anda untuk perlindungan DNS Rebinding . Router saya (pfsense) memiliki Perlindungan Rebinding DNS Diaktifkan secara default. Itu menyebabkan kesalahan 'saluran terbuka: gagal secara administratif dilarang: buka gagal' dengan SSH
sumber
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.
sumber
Kasus saya:
sumber
Saya mendapatkan kesalahan ini saat menulis entri ini di blog saya :
/etc/ssh/sshd_config
punya sesuatu seperti:Tapi
~/.ssh/config
punya:Perhatikan perbedaan huruf besar-kecil ( huruf besar ) 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:
Versi server OpenSSH:
sumber
Penyebab resolusi nama lainnya: My / etc / hosts memiliki alamat IP yang salah untuk nama server (bukan untuk localhost), seperti ini:
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:
Sungguh aneh bahwa IP asli menyebabkan kegagalan ketika saya menggunakan IP localhost literal untuk terowongan. Distro: Ubuntu 16.04 LTS.
sumber
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 untuk membuka penerusan terowongan ke 192.168.66.08, selalu gagal, karena '08' ditafsirkan oleh gethostbyaddr sebagai angka oktal yang tidak valid :)
sumber
Tampaknya ada banyak kemungkinan akar penyebab untuk pesan ini. Dalam kasus saya itu adalah ketidakmampuan untuk mengakses remote karena saya tidak menyediakan keyfile dengan benar.
The
-L
pilihan menambahkan SSH melompat implisit (efektif menggunakan host SSH eksplisit sebagai benteng / melompat server). Mungkin lebih mudah untuk men-debug ini dengan melakukan lompatan secara eksplisit dan membuat shell login ke mesin target menggunakan "proxycommand".Setelah ini berfungsi, Anda dapat melakukan port forward berdasarkan mesin target
localhost
(dengan asumsi ia bisa masuk sendiri):sumber