ssh tunnel ปฏิเสธการเชื่อมต่อกับ“ channel 2: open failed”


70

ทั้งหมดในทันที (อ่าน: โดยไม่ต้องเปลี่ยนพารามิเตอร์ใด ๆ ) netbsd virtualmachine ของฉันเริ่มทำตัวแปลก ๆ อาการที่เกี่ยวข้องกับการสร้างอุโมงค์ SSH

จากแล็ปท็อปของฉันฉันเปิดตัว:

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

จากนั้นในเปลือกอื่น:

$ irssi -c localhost -p 7000

debug ssh พูดว่า:

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

ฉันลองด้วย localhost: 80 เพื่อเชื่อมต่อกับเว็บเซิร์ฟเวอร์ (ระยะไกล) ด้วยผลลัพธ์ที่เหมือนกัน

รีโมตโฮสต์รัน 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

ฉันหลงทางนิดหน่อย ฉันพยายามเรียกใช้tcpdumpบนโฮสต์ระยะไกลและฉันพบ 'chksum ที่ไม่ดี' เหล่านี้:

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>

ฉันลองรีสตาร์ท ssh daemon เพื่อไม่เป็นประโยชน์ ฉันยังไม่ได้เริ่มระบบใหม่ - บางคนที่นี่สามารถแนะนำการวินิจฉัยอื่น ๆ ได้ ฉันคิดว่าอาจเป็นไดรเวอร์การ์ดเครือข่ายเสมือนหรือบางคนรูท ssh ของเรา

ไอเดีย .. ?


1
$ ssh -L 7000:127.0.0.1:7000 user@host -N -v -vสำหรับการแก้ไขปัญหาให้ลอง (คุณสามารถใช้ "-v" ได้สูงสุด 3 ครั้งเพื่อเพิ่มการฟุ่มเฟื่อย) นอกจากนี้เป็นไปได้ไหมว่า ssh ได้รับการปรับปรุงล่าสุด?
Mike Sherrill 'Cat Recall'

บันทึกผลลัพธ์ที่ฉันวางถูกรวบรวมด้วย -v แล้ว
lorenzog

1
คุณสามารถใช้ -v ได้สูงสุดสามครั้งเพื่อเพิ่มรายละเอียด ดังนั้นคุณอาจมองไปที่การส่งออกของssh -L 7000... -N -v -v(สองวี) ssh -L 7000... -N -v -v -vหรือ
Mike Sherrill 'Cat Recall'

@ MikeSherrill'CatRecall 'สามารถใช้ชวเลขได้ด้วยเช่นกัน: -vvv
jnns

คำตอบ:


42

แก้ไขปัญหา:

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

... เห็นได้ชัดว่าไม่ได้ชอบ ' localhost ' จากโฮสต์ระยะไกล ยังห่างไกล/etc/hostsประกอบด้วย:

::1                     localhost localhost.
127.0.0.1               localhost localhost.

ในขณะที่อินเตอร์เฟซเครือข่ายท้องถิ่นคือ

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

ถอนหายใจ มากสำหรับความโปรดปรานของ 100rp ฉันใส่ :)


1
อา ถ้าอย่างนั้นฉันก็ไม่ต้องกังวลที่จะเขียนความคิดเห็นของฉันเป็นคำตอบ (ดูว่า ssh ต้องการที่อยู่ ipv6 บนระบบของคุณหรือไม่)
Mike Sherrill 'Cat Recall'

คุณแนะนำให้เพิ่มตัวเลือก -v เป็นสองเท่า แต่นั่นไม่ได้แสดงอะไรใหม่ .. อย่างไรก็ตามโดยทำให้ฉันดูผลลัพธ์อีกครั้งหลังจากสองสามวันช่วยระบุปัญหา ถ้าคุณต้องการที่จะเขียนคำตอบฉันมีความสุขมากกว่าที่จะให้คุณโปรดปราน
lorenzog

1
ที่จริงแล้วจุดสำคัญคือการแทนที่ "localhost" ด้วย "127.0.0.1" อาร์กิวเมนต์ "-v" เพิ่มเติมอาจมีประโยชน์ แต่ก็ไม่ใช่สิ่งที่ฉันตั้งใจ ขอบคุณ
Mike Sherrill 'Cat Recall'

ตามโพสต์นั้นใน superuser: superuser.com/questions/346971/ssh-tunnel-connection-refused โปรแกรมที่กำหนดค่าให้ฟังที่อยู่เฉพาะจะรับฟังที่อยู่เฉพาะนั้น
jopasserat

1
สำหรับฉันเพิ่มนำ ":" ทำงานดังนั้นคำสั่งในกรณีของคุณจะมีลักษณะเช่นนี้: ssh -L: 7000: 127.0.0.1: 7000 ผู้ใช้ @ host -N -v -v
valentt

21

แม้ว่าปัญหาของ OP ได้รับการแก้ไขแล้ว แต่ฉันตัดสินใจที่จะแบ่งปันวิธีแก้ปัญหาของฉันเพราะฉันได้รับข้อความแสดงข้อผิดพลาดเดียวกันจาก ssh และฉันไม่พบวิธีแก้ไขปัญหาใด ๆ ในเว็บไซต์อื่น

ในกรณีของฉันฉันต้องเชื่อมต่อกับบริการที่ฟังเฉพาะใน IPv6 ฉันเหนื่อย:

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

และวิธีอื่น ๆ แต่ไม่ได้ผล การพยายามเชื่อมต่อใด ๆ เพื่อhttp://localhost:51005ทำให้เกิดข้อผิดพลาดเช่นนี้: channel 2: open failed: connect failed: Connection refused

ทางออกคือ:

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

ที่อยู่ IPv6 ต้องอยู่ในเครื่องหมายวงเล็บเหลี่ยม


1
เกิดอะไรขึ้นถ้าคุณใช้ไฟล์ ssh config ตัวอย่าง: "LocalForward localhost: 64160 192.168.1.56:3389"
meffect

สำหรับฉันเพิ่มนำ ":" ทำงานดังนั้นคำสั่งในกรณีของคุณจะมีลักษณะเช่นนี้: ssh -f root@192.168.0.18 -L: 51005: 127.0.0.1: 51005 -N
valentt

9

ฉันจะลองสิ่งนี้ก่อน

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

คุณสามารถใช้ "-v" ได้สูงสุด 3 ครั้งเพื่อเพิ่มรายละเอียด

ฉันคิดว่าข้อความแสดงข้อผิดพลาดนี้อาจเกิดขึ้นได้หากไฟร์วอลล์บล็อกพอร์ต 7000 แต่คุณได้ตัดออกไปแล้ว (หากผู้อ่านในภายหลังไม่ได้ตัดสิทธิ์ออกดูที่ผลลัพธ์ของnetstat --numeric-ports)

ฉันคิดว่าฉันอาจเห็นข้อความแสดงข้อผิดพลาดนี้เมื่อนานมาแล้วเมื่อ ssh เริ่มทราบที่อยู่ IPV6 หลังจากการอัพเดต ฉันอาจจะผิดเกี่ยวกับเรื่องนั้น หากคุณรู้สึกอยากทดลองใช้คุณสามารถลองที่อยู่ลูปแบ็ค IPV6 "0: 0: 0: 0: 0: 0: 0: 1:" (หรือ ":: 1")


3

"... เห็นได้ชัดว่าไม่ได้ชอบโฮสต์ท้องถิ่น 'localhost' แต่รีโมต / etc / hosts ประกอบด้วย:"

ยกเว้นคุณกำลังเรียกใช้ ssh บนไคลเอนต์ดังนั้นไคลเอ็นต์ของคุณจะไม่ชอบ 'localhost' ไฟล์ระยะไกล / etc / hosts สำหรับการเชื่อมต่อระยะไกลออกไปไม่ได้ที่เข้ามาเชื่อมต่อ


1
ที่ทำให้ฉันสับสนเช่นกัน เมื่อคุณพิมพ์ localhost ในเครื่องของคุณมันจะได้รับการแก้ไขในพื้นที่
Ahmedov

3

ฉันพบข้อผิดพลาดเดียวกันนี้ในขณะที่พยายามเชื่อมต่อกับ mysql บนเซิร์ฟเวอร์อื่นผ่านทาง ssh tunnel ฉันพบว่าพารามิเตอร์ bind-address ใน /etc/my.cnf บนเซิร์ฟเวอร์เป้าหมายนั้นถูกผูกไว้กับ ip ภายนอกของฉัน (เซิร์ฟเวอร์ NIC คู่) มากกว่าภายในซึ่งฉันไม่ได้ใช้

เมื่อฉันตั้ง bind-address = 127.0.0.1 ฉันสามารถใช้ ssh tunnel ได้สำเร็จดังต่อไปนี้:

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

นั่นก็ใช้ได้สำหรับฉันเช่นกัน คุณสามารถผูก MySQL กับที่อยู่เดียวเท่านั้น
leeand00

3

ฉันพบข้อผิดพลาดนี้เมื่อฉันส่งต่อพอร์ตด้วยชื่อโดเมนแบบเต็มแทนที่จะเป็น localhost:

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

พอร์ตถูกเปิดสำหรับ localhost เท่านั้นดังนั้นเพื่อยอมรับการเชื่อมต่อที่มีชื่อครบถ้วนฉันต้องเพิ่มคำอธิบายพอร์ตการผูก :

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

ซึ่งจะอนุญาตการเชื่อมต่อจากทุกที่ (ดังนั้นจึงไม่ปลอดภัยใช้เท่าที่จำเป็น)


2

สำหรับฉันเพิ่มนำ ":" ทำงานดังนั้นคำสั่งในกรณีของคุณจะมีลักษณะเช่นนี้:

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

เวลาผ่านไปนานเกินไปและฉันไม่สามารถย้อนกลับและตรวจสอบได้ แต่สิ่งนี้ดูดี
lorenzog

1

???

ช่องที่ 2: เปิดล้มเหลว: เชื่อมต่อล้มเหลว: ปฏิเสธการเชื่อมต่อ

ที่user@hostไม่มีอะไรฟังพอร์ต 7000 นั่นง่ายและนั่นคือทั้งหมด


1
ที่ไม่เป็นความจริง. มีบริการที่โฮสต์อยู่: 7000 ฉันยังลองกับบริการอื่น ๆ
lorenzog

2
ไม่งั้นมันก็จะหยุดเชื่อมต่อ
RickyA

4
@RickyA: อันที่จริงมันไม่จริง หากพอร์ตไม่เชื่อมต่อการเชื่อมต่อจะถูกปฏิเสธ ฉันได้รับข้อผิดพลาดนี้จากการใช้พอร์ตภายในที่ไม่ถูกต้อง (ไม่มีบริการใดทำงานอยู่) ข้อผิดพลาดหายไปเมื่อฉันแก้ไขข้อผิดพลาด poige นั้นถูกต้องหากว่าไม่มีสิ่งใดที่ฟังบนพอร์ตมันจะทำให้เกิดข้อผิดพลาด
erb

1

ฉันได้รับข้อความแสดงข้อผิดพลาดเดียวกัน:

ช่อง 3: เปิดล้มเหลว: เชื่อมต่อล้มเหลว: ปฏิเสธการเชื่อมต่อ

และสาเหตุคือข้อผิดพลาดของมนุษย์ - ฉันพยายามเข้าถึงพอร์ตอื่นบนรีโมตโฮสต์มากกว่าที่ฉันระบุ

แค่คิดว่าฉันจะแบ่งปันสิ่งนั้นถึงแม้ว่านี่อาจไม่ใช่เหตุผลที่คุณส่วนใหญ่ประสบกับข้อผิดพลาดนี้


ในกรณีของฉัน: นี่คือสิ่งที่ฉันทำ ความผิดพลาดโง่ ๆ เช่นนี้ แต่ใช้คำตอบนี้เพื่อให้ฉันตรวจสอบพอร์ต Doh
Ken Sharp

1

สำหรับผมผมพยายามที่เมื่อฉันควรจะได้รับการทำssh -L <port>:<remote server IP>:<port> <login>@<remote server IP>ssh -L <port>:127.0.0.1:<port> <login>@<remote server IP>

ฉันหวังว่านี่จะช่วยให้ใครบางคน!


1

การตีความทางเลือกคือในกรณีของฉันคุณพิมพ์ผิด

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

สิ่งที่เกิดขึ้นที่นี่คือที่อยู่ IP มีศูนย์หนึ่งศูนย์มากเกินไปดังนั้นจึงไม่ใช่ที่อยู่ที่ถูกต้อง ดังนั้น ssh ถือว่าเป็นชื่อโดเมนแทนซึ่งไม่สามารถแก้ไขได้ อ๊ะ!

PS: ฉันเสริมนี้เพื่อให้เรามีรายการที่ครอบคลุมของปัญหาที่เป็นไปได้เมื่อแก้ไขปัญหาอาการเดียวกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.