đường hầm ssh từ chối kết nối với kênh 2: mở thất bại


70

Thật bất ngờ (đọc: không thay đổi bất kỳ tham số nào) máy ảo netbsd của tôi bắt đầu hành động kỳ quặc. Các triệu chứng liên quan đến đường hầm ssh.

Từ máy tính xách tay của tôi, tôi khởi chạy:

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

Sau đó, trong một vỏ khác:

$ irssi -c localhost -p 7000

Gỡ lỗi ssh nói:

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

Tôi cũng đã thử với localhost: 80 để kết nối với máy chủ web (từ xa), với kết quả giống hệt nhau.

Máy chủ từ xa chạy 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

Tôi hơi lạc lõng. Tôi đã thử chạy tcpdumptrên máy chủ từ xa và tôi phát hiện ra những 'chksum xấu' này:

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>

Tôi đã thử khởi động lại ssh daemon nhưng không có kết quả. Tôi chưa khởi động lại - có lẽ ai đó ở đây có thể đề xuất các chẩn đoán khác. Tôi nghĩ rằng nó có thể là trình điều khiển card mạng ảo hoặc ai đó đã root ssh của chúng tôi.

Ý tưởng ..?


1
Để khắc phục sự cố, hãy thử $ ssh -L 7000:127.0.0.1:7000 user@host -N -v -v. (Bạn có thể sử dụng "-v" tối đa 3 lần để tăng mức độ chi tiết.) Ngoài ra, có thể là ssh đã được cập nhật gần đây không?
Mike Sherrill 'Nhớ lại mèo'

Nhật ký đầu ra tôi đã dán đã được thu thập với -v rồi.
lorenzog

1
Bạn có thể sử dụng -v tối đa ba lần để tăng mức độ chi tiết. Vì vậy, bạn có thể nhìn vào đầu ra của ssh -L 7000... -N -v -v(hai v) hoặc ssh -L 7000... -N -v -v -v.
Mike Sherrill 'Nhớ lại mèo'

@ MikeSherrill'CatRecall 'Một cách viết tắt cũng có thể được sử dụng: -vvv
jnns

Câu trả lời:


42

Vấn đề được giải quyết:

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

... Rõ ràng, ' localhost ' không được máy chủ từ xa yêu thích. Tuy nhiên, từ xa /etc/hostscó chứa:

::1                     localhost localhost.
127.0.0.1               localhost localhost.

trong khi giao diện mạng cục bộ là

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

Thở dài. rất nhiều cho tiền thưởng 100rp tôi đưa vào :)


1
Ah. Vậy thì, tôi sẽ không buồn viết bình luận của mình như một câu trả lời. (Xem xét liệu ssh có thích địa chỉ ipv6 trên hệ thống của bạn không.)
Mike Sherrill 'Cat Recall'

Vâng, bạn đã đề xuất tăng gấp đôi tùy chọn -v, nhưng điều đó không hiển thị bất cứ điều gì mới .. tuy nhiên, bằng cách khiến tôi nhìn lại đầu ra sau một vài ngày giúp xác định vấn đề. Nếu bạn muốn viết lên câu trả lời, tôi rất vui khi cung cấp cho bạn tiền thưởng.
lorenzog

1
Trên thực tế, điểm quan trọng là thay thế "localhost" bằng "127.0.0.1". Các đối số "-v" bổ sung có thể hữu ích, nhưng chúng không phải là những gì tôi đang nhắm đến. Cảm ơn.
Mike Sherrill 'Nhớ lại mèo'

theo bài đăng đó trên superuser: superuser.com/questions/346971/ssh-tunnel-connection- từ chối một chương trình được định cấu hình để nghe trên một địa chỉ cụ thể sẽ lắng nghe địa chỉ cụ thể đó
jopasserat

1
Đối với tôi, việc thêm ":" hoạt động hàng đầu trong trường hợp của bạn sẽ giống như thế này: ssh -L: 7000: 127.0.0.1: 7000 user @ host -N -v -v
valentt

21

Mặc dù vấn đề của OP đã được giải quyết, tôi đã quyết định chia sẻ giải pháp cho vấn đề của mình, vì tôi nhận được thông báo lỗi tương tự từ ssh và tôi không tìm thấy bất kỳ giải pháp nào trên các trang web khác.

Trong trường hợp của tôi, tôi đã phải kết nối với dịch vụ chỉ nghe trên IPv6. Tôi đã thử:

ssh -f root@192.168.0.18 -L 51005: 127.0.0.1: 51005 -N
ssh -f root@192.168.0.18 -L 51005: localhost: 51005 -N

và một vài cách khác nhưng nó không hoạt động. Bất kỳ thử kết nối để http://localhost:51005gây ra lỗi như thế này: channel 2: open failed: connect failed: Connection refused

Giải pháp là:

ssh -f root@192.168.0.18 -L 51005: [:: 1]: 51005 -N

Địa chỉ IPv6 phải nằm trong dấu ngoặc vuông.


1
Điều gì nếu bạn sử dụng một tập tin cấu hình ssh? ví dụ: "LocalForward localhost: 64160 192.168.1.56:3389"
meffect

Đối với tôi, việc thêm ":" hoạt động lệnh trong trường hợp của bạn sẽ giống như thế này: ssh -f root@192.168.0.18 -L: 51005: 127.0.0.1: 51005 -N
valentt

9

Trước tiên tôi sẽ thử điều này.

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

Bạn có thể sử dụng "-v" tối đa 3 lần để tăng mức độ chi tiết.

Tôi nghĩ rằng thông báo lỗi này có thể phát sinh nếu tường lửa chặn cổng 7000, nhưng bạn đã loại trừ nó. (Nếu những người đọc sau này không loại trừ được điều đó, hãy nhìn vào đầu ra của netstat --numeric-ports.)

Tôi nghĩ rằng tôi có thể đã thấy thông báo lỗi này từ lâu, khi ssh lần đầu tiên biết về các địa chỉ IPV6 sau khi cập nhật. Tôi có thể sai về điều đó. Nếu bạn muốn thử nghiệm, bạn có thể thử địa chỉ vòng lặp IPV6 "0: 0: 0: 0: 0: 0: 0: 1" (hoặc ":: 1").


3

"... rõ ràng, 'localhost' không được máy chủ từ xa yêu thích. Tuy nhiên, remote / etc / hosts chứa:"

Ngoại trừ bạn đang chạy ssh trên máy khách, vì vậy 'localhost' không được khách hàng của bạn thích. Điều khiển từ xa / etc / hosts là dành cho điều khiển từ xa kết nối ra không đến kết nối.


1
điều đó cũng làm tôi bối rối Khi bạn nhập localhost trong localmachine, nó sẽ được giải quyết cục bộ
Ahmedov

3

Tôi đã gặp lỗi tương tự trong khi cố gắng kết nối với mysql trên một máy chủ khác thông qua một đường hầm ssh. Tôi thấy rằng tham số địa chỉ liên kết trong /etc/my.cnf trên máy chủ đích được liên kết với ip bên ngoài của tôi (máy chủ NIC kép) chứ không phải bên trong mà tôi không sử dụng.

Khi tôi đặt bind-address = 127.0.0.1, tôi có thể sử dụng thành công đường hầm ssh của mình như sau:

ssh -N -f -L 3307:127.0.0.1:3306 user@server.name

mysql -h 127.0.0.1 --port=3307 --protocol=TCP -uusername -ppassword

Điều đó làm việc cho tôi là tốt. Bạn chỉ có thể liên kết MySQL với một địa chỉ.
leeand00

3

Tôi đã gặp lỗi này khi tôi đang chuyển tiếp các cổng với một tên miền đầy đủ thay vì localhost:

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

Cổng chỉ được mở cho localhost, vì vậy để chấp nhận kết nối với tên đủ điều kiện, tôi phải thêm mô tả cổng ràng buộc :

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

sẽ cho phép kết nối từ bất cứ đâu (vì vậy nó không an toàn, hãy sử dụng một cách tiết kiệm).


2

Đối với tôi, việc thêm ":" hoạt động để lệnh trong trường hợp của bạn sẽ giống như thế này:

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

Quá nhiều thời gian đã trôi qua và tôi không thể quay lại và kiểm tra, nhưng điều này có vẻ tuyệt vời.
lorenzog

1

???

kênh 2: mở thất bại: kết nối thất bại: Kết nối bị từ chối

Không user@hostcó gì nghe cổng 7000, điều đó thật đơn giản và chỉ có thế.


1
Đo không phải sự thật. Có một dịch vụ đang chạy tại máy chủ: 7000. Tôi cũng đã thử với các dịch vụ khác.
lorenzog

2
Không, sau đó nó sẽ chỉ kết nối.
RickyA

4
@RickyA: Thật ra, điều đó không đúng. Nếu cổng không bị ràng buộc, kết nối sẽ bị từ chối. Tôi đã gặp lỗi này khi sử dụng cổng nội bộ sai (nơi không có dịch vụ nào đang chạy), lỗi đã biến mất khi tôi sửa lỗi. poige đúng ở chỗ nếu không có gì nghe trên cổng, nó sẽ gây ra lỗi.
erb

1

Tôi đã nhận được thông báo lỗi tương tự:

kênh 3: mở thất bại: kết nối thất bại: Kết nối bị từ chối

Và nguyên nhân là do lỗi của con người - tôi cố gắng truy cập một cổng khác trên máy chủ từ xa so với cổng tôi đã chỉ định.

Chỉ cần nghĩ rằng tôi sẽ chia sẻ điều đó, mặc dù đây có lẽ không phải là lý do tại sao hầu hết các bạn đang gặp phải lỗi này.


Trong trường hợp của tôi: đây chính xác là những gì tôi đã làm. Đó là một sai lầm ngu ngốc nhưng nó đã đưa ra câu trả lời này để làm cho tôi kiểm tra cổng. Doh.
Ken Sharp

1

Đối với tôi, tôi đã cố gắng ssh -L <port>:<remote server IP>:<port> <login>@<remote server IP>khi tôi nên làm ssh -L <port>:127.0.0.1:<port> <login>@<remote server IP>.

Tôi hi vọng điêu nay se giup được ai đo!


1

Giải thích thay thế là, trong trường hợp của tôi, bạn gõ sai.

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

Điều xảy ra ở đây là địa chỉ IP có quá nhiều số 0, do đó không phải là địa chỉ hợp lệ. Vì vậy, ssh coi nó như một tên miền thay vì nó không thể giải quyết. Úi!

PS: Tôi bổ sung điều này để chúng tôi có danh sách toàn diện các vấn đề có thể xảy ra khi khắc phục các triệu chứng tương tự.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.