ssh tunnel menolak koneksi dengan "saluran 2: buka gagal"

70

Tiba-tiba (baca: tanpa mengubah parameter apa pun) netbd virtualmachine saya mulai bertingkah aneh. Gejala-gejalanya menyangkut ssh tunneling.

Dari laptop saya, saya meluncurkan:

$ ssh -L 7000:localhost:7000 user@host -N -v

Kemudian, di shell lain:

$ irssi -c localhost -p 7000

Debug ssh mengatakan:

debug1: Connection to port 7000 forwarding to localhost port 7000 requested.
debug1: channel 2: new [direct-tcpip]
channel 2: open failed: connect failed: Connection refused
debug1: channel 2: free: direct-tcpip: listening port 7000 for localhost port 7000, connect from 127.0.0.1 port 53954, nchannels 3

Saya mencoba juga dengan localhost: 80 untuk terhubung ke server web (jarak jauh), dengan hasil yang identik.

Host jarak jauh menjalankan NetBSD:

bash-4.2# uname -a
NetBSD host 5.1_STABLE NetBSD 5.1_STABLE (XEN3PAE_DOMU) #6: Fri Nov  4 16:56:31 MET 2011  root@youll-thank-me-later:/m/obj/m/src/sys/arch/i386/compile/XEN3PAE_DOMU i386

Saya agak tersesat. Saya mencoba menjalankan tcpdumppada host jarak jauh, dan saya melihat 'chksum buruk' ini:

09:25:55.823849 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 67, bad cksum 0 (->3cb3)!) 127.0.0.1.54381 > 127.0.0.1.7000: P, cksum 0xfe37 (incorrect (-> 0xa801), 1622402406:1622402421(15) ack 1635127887 win 4096 <nop,nop,timestamp 5002727 5002603>

Saya mencoba me-restart daemon ssh tetapi tidak berhasil. Saya belum reboot - mungkin seseorang di sini dapat menyarankan diagnosa lain. Saya pikir itu mungkin driver kartu jaringan virtual, atau seseorang melakukan root ssh kami.

Ide ide..?

lorenzog
sumber
1
Untuk pemecahan masalah, coba $ ssh -L 7000:127.0.0.1:7000 user@host -N -v -v. (Anda dapat menggunakan "-v" hingga 3 kali untuk meningkatkan verbositas.) Juga, mungkinkah ssh baru-baru ini diperbarui?
Mike Sherrill 'Cat Recall'
Log keluaran yang saya tempel sudah dikumpulkan dengan -v.
lorenzog
1
Anda bisa menggunakan -v hingga tiga kali untuk meningkatkan verbositas. Jadi, Anda mungkin melihat output dari ssh -L 7000... -N -v -v(dua v) atau ssh -L 7000... -N -v -v -v.
Mike Sherrill 'Cat Recall'
@ MikeSherrill'CatRecall 'Steno dapat digunakan juga:
-vvv

Jawaban:

42

Masalah terpecahkan:

$ ssh -L 7000:127.0.0.1:7000 user@host -N -v -v

... ternyata, ' localhost ' tidak disukai oleh host jarak jauh. Namun, remote /etc/hostsberisi:

::1                     localhost localhost.
127.0.0.1               localhost localhost.

sedangkan antarmuka jaringan lokal adalah

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33184
        inet 127.0.0.1 netmask 0xff000000
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2

Mendesah. begitu banyak untuk hadiah 100rp saya pakai :)

lorenzog
sumber
1
Ah. Kalau begitu, saya tidak akan repot-repot menuliskan komentar saya sebagai jawaban. (Lihat apakah ssh lebih suka alamat ipv6 di sistem Anda.)
Mike Sherrill 'Cat Recall'
Yah Anda menyarankan menggandakan opsi -v, tetapi itu tidak menunjukkan sesuatu yang baru .. Namun, dengan membuat saya melihat output lagi setelah beberapa hari membantu untuk menunjukkan masalah. Jika Anda ingin menuliskan jawabannya, saya lebih dari senang untuk memberi Anda hadiah.
lorenzog
1
Sebenarnya, poin penting adalah mengganti "localhost" dengan "127.0.0.1". Argumen "-v" tambahan mungkin bisa membantu, tetapi itu bukan yang saya tuju. Terima kasih.
Mike Sherrill 'Cat Recall'
menurut postingan itu pada superuser: superuser.com/questions/346971/ssh-tunnel-connection- dituduh program yang dikonfigurasi untuk mendengarkan alamat tertentu akan mendengarkan alamat tertentu
jopasserat
1
Bagi saya menambahkan memimpin ":" berfungsi maka perintah dalam kasus Anda akan terlihat seperti ini: ssh -L: 7000: 127.0.0.1: 7000 user @ host -N -v -v
valentt
21

Meskipun masalah OP telah dipecahkan, saya memutuskan untuk berbagi solusi untuk masalah saya, karena saya mendapat pesan kesalahan yang sama dari ssh dan saya tidak menemukan solusi di situs lain.

Dalam kasus saya, saya harus terhubung ke layanan yang hanya mendengarkan pada IPv6. Saya mencoba:

ssh -f [email protected] -L 51005: 127.0.0.1: 51005 -N
ssh -f [email protected] -L 51005: localhost: 51005 -N

dan beberapa cara lain tetapi tidak berhasil. Setiap percobaan koneksi ke http://localhost:51005menyebabkan kesalahan seperti ini: channel 2: open failed: connect failed: Connection refused

Solusinya adalah:

ssh -f [email protected] -L 51005: [:: 1]: 51005 -N

Alamat IPv6 harus dalam tanda kurung siku.

rzymek
sumber
1
Bagaimana jika Anda menggunakan file konfigurasi ssh? contoh: "LocalForward localhost: 64160 192.168.1.56:3389"
meffect
Bagi saya menambahkan leading ":" berfungsi maka perintah dalam kasus Anda akan terlihat seperti ini: ssh -f [email protected] -L: 51005: 127.0.0.1: 51005 -N
valentt
9

Saya pertama kali akan mencoba ini.

$ ssh -L 7000:127.0.0.1:7000 user@host -N -v -v

Anda dapat menggunakan "-v" hingga 3 kali untuk meningkatkan verbositas.

Saya pikir pesan kesalahan ini dapat muncul jika firewall memblokir port 7000, tetapi Anda sudah mengesampingkannya. (Jika pembaca nanti tidak mengesampingkan itu, lihat output dari netstat --numeric-ports.)

Saya pikir saya mungkin telah melihat pesan kesalahan ini sejak lama, ketika ssh pertama kali mengetahui alamat IPV6 setelah pembaruan. Saya bisa salah tentang itu. Jika Anda merasa ingin bereksperimen, Anda dapat mencoba alamat loopback IPV6 "0: 0: 0: 0: 0: 0: 0: 0: 0: 1" (atau ":: 1").

Mike Sherrill 'Cat Recall'
sumber
3

"... rupanya, 'localhost' tidak disukai oleh host jarak jauh. Namun, remote / etc / hosts mengandung:"

Kecuali Anda menjalankan ssh pada klien, jadi 'localhost' tidak disukai oleh klien Anda. Remote / etc / hosts adalah untuk remote menghubungkan keluar tidak masuk koneksi.

bilbo baggins
sumber
1
itu juga membingungkan saya. Saat Anda mengetik localhost di mesin lokal Anda, itu akan diselesaikan secara lokal
Ahmedov
3

Saya mengalami kesalahan yang sama saat mencoba terhubung ke mysql di server lain melalui terowongan ssh. Saya menemukan bahwa parameter bind-address di /etc/my.cnf pada server target terikat ke ip eksternal saya (server NIC ganda) daripada internal, yang tidak saya gunakan.

Ketika saya mengatur bind-address = 127.0.0.1, saya bisa berhasil menggunakan terowongan ssh saya sebagai berikut:

ssh -N -f -L 3307:127.0.0.1:3306 [email protected]

mysql -h 127.0.0.1 --port=3307 --protocol=TCP -uusername -ppassword
Tom McQuarrie
sumber
Itu juga berhasil bagi saya. Anda hanya dapat mengikat MySQL ke satu alamat.
leeand00
3

Saya mengalami kesalahan ini ketika saya meneruskan port dengan nama domain lengkap alih-alih localhost:

ssh -L 5900:host.name.com:5900 x11vnc

Port dibuka hanya untuk localhost, jadi untuk menerima koneksi dengan nama yang sepenuhnya memenuhi syarat, saya harus menambahkan deskripsi port yang mengikat :

ssh -L *:5900:host.name.com:5900 x11vnc

yang akan memungkinkan koneksi dari mana saja (jadi itu tidak aman, gunakan hemat).

cengique
sumber
2

Bagi saya menambahkan memimpin ":" berfungsi sehingga perintah dalam kasus Anda akan terlihat seperti ini:

ssh -L :7000:localhost:7000 user@host -N -v
valentt
sumber
Terlalu banyak waktu telah berlalu dan saya tidak dapat kembali dan memeriksa, tetapi ini terlihat hebat.
lorenzog
1

???

saluran 2: terbuka gagal: koneksi gagal: Koneksi ditolak

Tidak user@hostada yang mendengarkan port 7000, itu sederhana dan itu saja.

poige
sumber
1
Itu tidak benar. Ada layanan yang berjalan di host: 7000. Saya juga mencoba dengan layanan lain.
lorenzog
2
Tidak, maka itu hanya hang yang terhubung.
RickyA
4
@ RickyA: Sebenarnya, itu tidak benar. Jika port tidak terikat koneksi akan ditolak. Saya mendapatkan kesalahan ini dari menggunakan port internal yang salah (di mana tidak ada layanan berjalan), kesalahan hilang ketika saya memperbaiki kesalahan. poige benar bahwa jika tidak ada yang mendengarkan di port, itu akan menyebabkan kesalahan.
erb
1

Saya menerima pesan kesalahan yang sama:

saluran 3: buka gagal: koneksi gagal: Koneksi ditolak

Dan penyebabnya adalah kesalahan manusia - saya mencoba mengakses port yang berbeda pada host jarak jauh daripada yang saya tentukan.

Hanya berpikir saya akan membagikannya, meskipun ini mungkin bukan alasan mengapa sebagian besar dari Anda mengalami kesalahan ini.

Roei Bahumi
sumber
Dalam kasus saya: inilah tepatnya yang saya lakukan. Kesalahan yang sangat bodoh tetapi butuh jawaban ini untuk membuat saya memeriksa porta. Doh.
Ken Sharp
1

Bagi saya, saya berusaha ssh -L <port>:<remote server IP>:<port> <login>@<remote server IP>ketika seharusnya saya lakukan ssh -L <port>:127.0.0.1:<port> <login>@<remote server IP>.

Saya harap ini membantu seseorang!

ryanwc
sumber
1

Interpretasi alternatif, dalam kasus saya, Anda salah mengetik.

user@host ~ $ ssh -vvvNL 4444:127.0.0.0.1:4444
...
channel 2: open failed: connect failed: Name or service not known

Apa yang terjadi di sini adalah alamat IP memiliki satu nol terlalu banyak, sehingga bukan alamat yang valid. Jadi ssh memperlakukannya sebagai nama domain yang tidak dapat diselesaikan. Ups!

PS: Saya melengkapi ini sehingga kami memiliki daftar lengkap masalah yang mungkin terjadi saat mengatasi gejala yang sama.

Hincor
sumber