นี่เป็นคำถามที่ยอมรับได้เกี่ยวกับการเชื่อมต่อที่ถูกปฏิเสธ
เราเห็นคำถามมากมายเกี่ยวกับผลกระทบ
เมื่อฉันพยายามเชื่อมต่อกับระบบฉันได้รับข้อความ
การเชื่อมต่อถูกปฏิเสธ
ทำไมนี้
นี่เป็นคำถามที่ยอมรับได้เกี่ยวกับการเชื่อมต่อที่ถูกปฏิเสธ
เราเห็นคำถามมากมายเกี่ยวกับผลกระทบ
เมื่อฉันพยายามเชื่อมต่อกับระบบฉันได้รับข้อความ
การเชื่อมต่อถูกปฏิเสธ
ทำไมนี้
คำตอบ:
หมายเหตุ : ข้อความนี้เป็นอาการของปัญหาที่คุณพยายามแก้ไข การทำความเข้าใจสาเหตุของข้อความในที่สุดจะนำคุณไปสู่การแก้ปัญหาของคุณ
ข้อความ 'การเชื่อมต่อที่ถูกปฏิเสธ' มีสองสาเหตุหลัก:
ไม่มีกระบวนการรับฟัง
นี่คือสาเหตุที่พบบ่อยที่สุดสำหรับข้อความ ก่อนอื่นให้แน่ใจว่าคุณกำลังพยายามเชื่อมต่อกับระบบที่ถูกต้อง หากคุณต้องการตรวจสอบว่านี่เป็นปัญหาหรือไม่บนระบบรีโมตให้รันnetstatหรือss 1เช่นหากคุณคาดหวังว่ากระบวนการจะรับฟังพอร์ต 22222
sudo netstat -tnlp | grep :22222
หรือ
ss -tnlp | grep :22222
สำหรับ OSX คำสั่งที่เหมาะสมคือ
sudo netstat -tnlp tcp | grep '\.80 '
หากไม่มีอะไรฟังแล้วข้างต้นจะไม่สร้างผลลัพธ์ หากคุณเห็นผลลัพธ์บางอย่างให้ยืนยันว่าเป็นสิ่งที่คุณคาดหวังจากนั้นดูส่วนไฟร์วอลล์ด้านล่าง
หากคุณไม่สามารถเข้าถึงระบบรีโมตและต้องการยืนยันปัญหาก่อนที่จะรายงานไปยังผู้ดูแลระบบที่เกี่ยวข้องคุณสามารถใช้ tcpdump (wireshark หรือคล้ายกัน)
เมื่อพยายามเชื่อมต่อกับ IP: พอร์ตที่ไม่มีสิ่งใดรับฟังการตอบสนองจากระบบรีโมตไปยังแพ็กเก็ต SYN เริ่มต้นคือแพ็กเก็ตที่ตั้งค่าสถานะ RST, ACK นี่เป็นการปิดการเชื่อมต่อและทำให้ข้อความปฏิเสธการเชื่อมต่อเช่น
$ sudo tcpdump -n โฮสต์ 192.0.2.1 และพอร์ต 22222
tcpdump: ระงับเอาต์พุต verbose, ใช้ -v หรือ -vv สำหรับการถอดรหัสโปรโตคอลเต็ม
ฟัง enp14s0, ลิงค์ประเภท EN10MB (Ethernet), ขนาดการจับภาพ 262144 bytes
12: 31: 27.013976 192.0.2.2.34390> 192.0.2.1.22222: Flags [S] , seq 1207858804, ชนะ 29200, ตัวเลือก [mss 1460, sackOK, TS val 15306344 ecr 0, nop, wscale 7], ความยาว 0
12: 31: 27.020162 IP 192.0.2.1.22222> 192.0.2.2.34390: Flags [R. ] , seq 0, ack 1207858805, ชนะ 0, ความยาว 0
โปรดทราบว่า tcpdump ใช้ เพื่อแทนค่าสถานะACK
พอร์ตถูกบล็อกโดยไฟร์วอลล์
หากพอร์ตถูกบล็อกโดยไฟร์วอลล์และไฟร์วอลล์ได้รับการกำหนดค่าให้ตอบกลับicmp-port-unreachable
สิ่งนี้จะทำให้ข้อความปฏิเสธการเชื่อมต่อ คุณสามารถเห็นสิ่งนี้อีกครั้งด้วย tcpdump (หรือคล้ายกัน)
$ sudo tcpdump -n icmp
tcpdump: ระงับเอาต์พุต verbose, ใช้ -v หรือ -vv สำหรับการถอดรหัสโปรโตคอลแบบเต็ม
ฟัง enp14s0, ลิงค์ประเภท EN10MB (Ethernet), ขนาดการจับ 262144 ไบต์ 13: 03: 24.149897 IP 192.0.2.1> 192.0 2.2: ICMP 192.0.2.1 พอร์ต tcp 22222 เข้าไม่ถึงความยาว 68
โปรดทราบว่าสิ่งนี้จะบอกเราว่าไฟร์วอลล์บล็อกอยู่ที่ไหน
ดังนั้นตอนนี้คุณรู้ว่าสิ่งที่ทำให้ข้อความปฏิเสธการเชื่อมต่อคุณควรดำเนินการที่เหมาะสมเช่นติดต่อผู้ดูแลระบบไฟร์วอลล์หรือตรวจสอบสาเหตุของกระบวนการที่ไม่ฟัง
1มีเครื่องมืออื่นที่มีให้ใช้งาน
สำหรับฉันใน Debian 6 บีบมันง่ายเหมือนการตรวจสอบบริการ SSH :
sudo service ssh status
และค้นหาสิ่งที่ไม่มีอยู่ (พร้อมข้อความssh: unrecognized service
) เพียงแค่ติดตั้งบริการ :
sudo apt-get install openssh-server
วิธีนี้ใช้ได้หากคุณไม่ได้รับการเชื่อมต่อ SFTP เนื่องจาก SFTP เป็นส่วนหนึ่งของ SSH (ในขณะที่ FTPS เป็นส่วนย่อยของ FTP)