หน้าจอหรือคล้ายกันสำหรับการเชื่อมต่อ SSH ที่ไม่ต่อเนื่องโดยอัตโนมัติ


18

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

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

ฉันใช้ Ubuntu 14.04 LTS รุ่น MATE ขอบคุณ


4
เรื่อง "หน้าต่างเชลล์มีแนวโน้มที่จะหยุด": นั่นเป็นเพราะ ssh ในพื้นที่ของคุณไม่ทราบว่าการเชื่อมต่อนั้นตาย กด<Enter>และพิมพ์~.เพื่อบอกให้ฝ่ายคุณเลิกการเชื่อมต่อและคุณสามารถทำซ้ำคำสั่ง ssh สุดท้ายเพื่อเชื่อมต่อใหม่ (เช่นลูกศรขึ้นหรือ!!)
alexis

@alexis ที่ดูเหมือนเป็นวิธีที่รวดเร็วกว่าในการเชื่อมต่ออีกครั้งขอบคุณ! ฉันชอบที่จะให้มันเกิดขึ้นโดยอัตโนมัติแม้ว่า ...
Max Williams

คำตอบ:


23

คุณสามารถดูการใช้mosh: https://mosh.org/

คุณสามารถตั้งค่าเซิร์ฟเวอร์ 'กระโดด' ด้วยการเชื่อมต่ออินเทอร์เน็ตที่เชื่อถือได้ซึ่งคุณใช้moshในการเชื่อมต่อแล้วมีsshเซสชันไปยังแต่ละเซิร์ฟเวอร์ที่คุณจัดการ เหตุผลที่ฉันแนะนำให้ใช้เซิร์ฟเวอร์กระโดดคือคุณอาจไม่ต้องการติดตั้งmoshบนเซิร์ฟเวอร์ที่คุณกำลังจัดการ

ข้อดีอีกอย่างของmoshมันคือการใช้ UDP แทน TCP และเซสชันของคุณสามารถเปลี่ยนแปลงที่อยู่ IP ได้ตัวอย่างเช่นเปลี่ยนจาก WiFi เป็นการเชื่อมต่ออินเทอร์เน็ตบนมือถือ

เพียงเพื่อให้ชัดเจนmoshไม่ได้เป็นแทนแต่screen sshยังคงเป็นความคิดที่ดีที่จะใช้screenกับมันเนื่องจากmoshตัวมันเองไม่ได้ให้วิธีการเชื่อมต่อกับเซสชันของคุณอีกครั้งหากลูกค้าตายด้วยเหตุผลบางประการ


ขอบคุณเป็นเพียงเซิร์ฟเวอร์เดียว (ส่วนใหญ่) และเราเป็นเจ้าของดังนั้นฉันควรจะติดตั้ง Mosh ฉันจะตรวจสอบมันออก
Max Williams

ที่จริงแล้วมันกลับกลายเป็นว่าเพราะเซิร์ฟเวอร์ของเราค่อนข้างเก่า (หรือเรียกใช้อูบุนตูเก่าที่ฉันควรพูด) มันยากเกินไปที่จะติดตั้ง :(
Max Williams

@ MaxWilliams อายุเท่าไหร่? แม้แต่ LTS 12.4 ก็ได้รับการสนับสนุน และทำไมไม่ลองรวบรวมมันด้วยตัวคุณเอง
phuclv

เมื่อฉันอ่านเอกสาร mosh คุณจะต้องมีเซิร์ฟเวอร์ mosh ในแต่ละโฮสต์ที่คุณต้องการจัดการจากระยะไกล ยังน่าสนใจอย่างแน่นอน
สัญลักษณ์ตัวแทน

1
การเชื่อมต่อกับเทอร์มินัล tmux บน mosh เป็นทางออกที่มั่นคงที่สุดสำหรับฉัน
Nemo

3

ฉันใช้tmuxงานมาหลายปีแล้วและจากประสบการณ์ของฉันมันเชื่อมต่อใหม่โดยอัตโนมัติ อย่างน้อยเมื่อการเชื่อมต่อล้มเหลวในระยะเวลาอันสั้น โปรดทราบว่าฉันใช้จริงbyobuกับ tmux เป็นแบ็กเอนด์ ฉันไม่รู้ว่าความแข็งแกร่งนี้เป็นคุณสมบัติของtmuxหรือbyobuทั้งสองอย่างรวมกัน แต่ฉันขอแนะนำให้คุณลองทั้งคู่

ฉันเชื่อมต่อจาก Arch ท้องถิ่นของฉันติดตั้งไปยังเซิร์ฟเวอร์ Ubuntu ระยะไกลผ่าน VPN ฉันทดสอบตอนนี้โดยถอดสายเคเบิลเครือข่ายขณะที่ฉันเชื่อมต่อกับรีโมท เซสชันหยุดทำงาน แต่ทันทีที่เสียบสายเคเบิลของฉันอีกครั้งก็กลับมาทำงานต่อได้อย่างราบรื่น

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

ในกรณีที่มีความเกี่ยวข้องฉันใช้ทั้งหมดนี้terminatorเป็นโปรแกรมจำลองเทอร์มินัล

ทั้งสามมีอยู่ในที่เก็บ Ubuntu:

sudo apt-get install tmux terminator byobu

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


1
เมื่อคุณรีสตาร์ทเราเตอร์ของคุณคุณอาจได้รับที่อยู่ IP สาธารณะอื่นซึ่งจะทำให้การtcpเชื่อมต่อขาด จากประสบการณ์ของฉันsshสามารถยืดหยุ่นได้ถึงการปล่อยเครือข่ายไม่สม่ำเสมอฉันไม่คิดว่าสิ่งนี้เกี่ยวข้องกับข้อเท็จจริงที่คุณใช้tmuxในsshหน้าต่าง
แช็คเคิลฟอร์ดที่เป็นสนิม

3
ฉันจะพูดแบบเดียวกัน: แม้จะเป็น SSH ธรรมดาคุณสามารถจัดการกับการขาดการเชื่อมต่อสั้น ๆ ได้ตราบใดที่การเชื่อมต่อ TCP ไม่ตาย สิ่งนี้อาจเป็นไปได้ถ้าอินเทอร์เฟซของคุณถูกปิดหรือเราเตอร์บางตัวอาจฆ่า (เราเตอร์ NAT อาจลืมสถานะ NAT เมื่อรีบูทและหยุดการเชื่อมต่อที่มีอยู่) หรือClientAlive/ ServerAliveทริกเกอร์หรือ ... ฉันไม่รู้ว่าเกิดอะไรbyobuขึ้น .
ilkkachu

ใช่ แต่ OP ดูเหมือนว่าจะประสบปัญหาการแช่แข็งเมื่อการเชื่อมต่อล้มเหลวขณะที่ฉันทำไม่ได้ แต่ใช่คุณพูดถูกฉันเห็นสิ่งนี้ด้วย ssh แบบง่าย ๆ และไม่มี tmux อย่างไรก็ตามหน้าจออาจไม่สามารถจัดการกับมันได้?
terdon

2
@ MaxWilliams tmuxนั้นเป็นทางเลือกที่ทันสมัยscreenกว่าใช่ เมื่อฉันเริ่มทำงานอย่างที่ฉันทำตอนนี้และต้องการสิ่งนี้การอ่านคร่าวๆของฉันแนะนำว่าtmuxเป็นตัวเลือกที่ดีกว่าในวันนี้ ฉันก็ไม่แน่ใจเหมือนกัน 100% ว่ามันมีการจัดการการเชื่อมต่อที่หายไปที่ดีกว่าทั้งหมดที่ฉันรู้ก็คือมันสามารถกู้คืนจากการขาดช่วงเวลาสั้น ๆ ในประสบการณ์ของฉัน ไม่ว่าจะลงไปtmuxหรืออย่างอื่นฉันไม่รู้ แต่มันก็คุ้มค่าที่จะลอง :) Byobu นั้นเป็นส่วนหน้าของหน้าจอ / tmux ไม่ใช่ตัวเลียนแบบเทอร์มินัล GUI มันมีประโยชน์เหลือเกิน: byobu.org
terdon

2
tmux ไม่ได้ทำอะไรเกี่ยวกับการหยุดชะงักการเชื่อมต่อ มันทำงานร่วมกับอุปกรณ์ปลายทางที่จัดทำโดย ssh ทุกอย่างย่อมาจากการเชื่อมต่อ ssh
Jonas Schäfer

2

ใช้ServerAliveตัวเลือกของ ssh เพื่อตรวจสอบเมื่อการเชื่อมต่อล้มเหลว

ServerAliveCountMax
ตั้งค่าจำนวนข้อความเซิร์ฟเวอร์ที่มีชีวิต (ดูด้านล่าง) ซึ่งอาจถูกส่งโดยไม่ใช้ ssh (1) รับข้อความใด ๆ กลับจากเซิร์ฟเวอร์ หากถึงขีด จำกัด นี้ในขณะที่ข้อความเซิร์ฟเวอร์ยังมีชีวิตอยู่กำลังถูกส่ง ssh จะตัดการเชื่อมต่อจากเซิร์ฟเวอร์และยกเลิกเซสชัน เป็นสิ่งสำคัญที่จะต้องทราบว่าการใช้ข้อความเซิร์ฟเวอร์ที่ใช้งานจริงนั้นแตกต่างจาก TCPKeepAlive (ด้านล่าง) ข้อความที่ยังมีชีวิตของเซิร์ฟเวอร์จะถูกส่งผ่านแชนเนลที่เข้ารหัสดังนั้นจึงจะไม่สามารถปลอมแปลงได้ ตัวเลือก TCP keepalive ที่เปิดใช้งานโดย TCPKeepAlive นั้นสามารถทำการปลอมแปลงได้ กลไกการทำงานของเซิร์ฟเวอร์นั้นมีประโยชน์เมื่อไคลเอนต์หรือเซิร์ฟเวอร์ขึ้นอยู่กับการรู้ว่าการเชื่อมต่อนั้นไม่ทำงาน

ค่าเริ่มต้นคือ 3 ถ้าตัวอย่างเช่น ServerAliveInterval (ดูด้านล่าง) ถูกตั้งค่าเป็น 15 และ ServerAliveCountMax จะถูกทิ้งไว้ที่ค่าเริ่มต้นหากเซิร์ฟเวอร์ไม่ตอบสนอง ssh จะยกเลิกการเชื่อมต่อหลังจากประมาณ 45 วินาที

ServerAliveInterval
ตั้งค่าช่วงเวลาหมดเวลาเป็นวินาทีหลังจากนั้นหากไม่ได้รับข้อมูลจากเซิร์ฟเวอร์ ssh (1) จะส่งข้อความผ่านแชนเนลที่เข้ารหัสเพื่อร้องขอการตอบกลับจากเซิร์ฟเวอร์ ค่าเริ่มต้นคือ 0 ระบุว่าข้อความเหล่านี้จะไม่ถูกส่งไปยังเซิร์ฟเวอร์

ดังนั้นหากคุณตั้งค่าServerAliveIntervalเป็น 5 sshจะตัดการเชื่อมต่อโดยอัตโนมัติหากเครือข่ายหลุดออกเป็นเวลา 15 วินาที


ในการแบ่งเซสชั่น SSH ด้วยการบังคับฉันกด~.(หรือกดEnter ก่อนจากนั้น~.) ประกอบด้วย: ตัวหนี~และคำสั่งที่จะหยุดเซสชัน.
imz - Ivan Zakharyaschev

@ imz - IvanZakharyaschev ที่ถือว่าคุณสามารถบอกได้ว่าการเชื่อมต่อจะถูกแขวน การใช้ keepalive ของ SSH จะตรวจจับความล้มเหลวโดยอัตโนมัติ
Barmar

ฟังดูมีประโยชน์จริง ๆ ขอบคุณฉันจะลองอีกครั้งในครั้งต่อไปที่ฉันอยู่ใน "เขตที่ไม่สม่ำเสมอ"
Max Williams

@Barmar ใช่จริง ฉันยังคิดเกี่ยวกับปัญหาในการพิจารณาว่าการเชื่อมต่อนั้นหยุดทำงานจริงหรือฉันกดบางสิ่งบางอย่างโดยไม่ตั้งใจสามารถส่งกุญแจเหล่านี้ไปยังด้านไกล ... และฉันไม่รู้วิธีแก้ปัญหาที่ดี
imz - Ivan Zakharyaschev

2

ในสภาพที่คล้ายกันฉันมักจะใช้eshellกับ TRAMP (มากกว่า ssh) ใน Emacs TRAMP ดูแลการเชื่อมต่ออีกครั้งเมื่อจำเป็นโดยไม่ทำให้ฉันลำบากใจมากสำหรับการให้คำสั่งที่ต้องการสำหรับเชลล์ระยะไกล

อย่างไรก็ตาม eshell นั้นไม่ดีเท่าเทอร์มินัลนั่นคือสำหรับการรันคำสั่งที่ทำสิ่งพิเศษกับเทอร์มินัลหรือที่รันในช่วงเวลาสำคัญอย่างต่อเนื่อง

โดยทั่วไปมันค่อนข้างง่ายที่จะเริ่มใช้ใน Emacs ด้วย TRAMP:

M-x eshell
cd /user@host:

1

คำปฏิเสธ

หากการเชื่อมต่อ SSH ของคุณไม่รอดจากปัญหาเครือข่ายขาดหายไปแสดงว่ามีบางสิ่งที่เกิดขึ้นซึ่งไม่ได้แจ้งให้ทราบsshและ TCP ทำสิ่งปกติ

ดูรายละเอียดด้านล่าง อย่างไรก็ตาม:

โซลูชันที่ไม่มีการพึ่งพาที่รวดเร็วที่สุดและสกปรกที่สุด

สร้างเชลล์สคริปต์เช่นนี้:

#!/bin/sh -

# Tune these numbers depending on how aggressively
# you want your SSH session to get reconnected.
timeout_options='-o ServerAliveInterval=4 -o ServerAliveCountMax=2'

# 255 is the status OpenSSH uses to signal SSH errors, which
# means we want to connect. All other exit statuses suggest
# an intentional exit.
status=255

# Keep opening the SSH connection and immediately dropping into
# `screen` until an intentional exit happens.
while [ "$status" = 255 ]
do
    ssh $timeout_options -t "$@" screen -dR
    status=$?
    # You can add a `sleep` command here or a counter or whatever
    # you might need as far as rate/retry limiting.
done
exit "$status"

เพียงแค่นี้ก็จะทำงานห่วงโง่ง่ายๆที่ช่วยให้พยายามที่จะเชื่อมต่อกับและแนบไปกับssh screenผ่านโฮสต์หรืออะไรก็ตามที่คุณมักจะส่งผ่านไปยังsshการเรียกร้องของคุณเป็นอาร์กิวเมนต์บรรทัดคำสั่ง

การเชื่อมต่อใหม่นั้นขึ้นอยู่กับว่า SSH รายงานข้อผิดพลาดกับการเชื่อมต่อหรือไม่ซึ่งหมายความว่าไม่มีความฉลาดในการตรวจหาข้อผิดพลาดที่ไม่ใช่ SSH เช่น "คุณไม่ได้เปิด WiFI" หรืออะไรก็ตาม แต่นั่นอาจไม่สำคัญสำหรับ คุณ.

ฉันสมมติว่าคุณมีssh-agentหรือไม่มีคีย์รหัสผ่าน SSH ที่จะช่วยให้การเชื่อมต่อใหม่ทำงานได้โดยไม่ต้องป้อนข้อมูลเพิ่มเติมจากคุณ

จะมีสภาพการแข่งขันขนาดเล็กซึ่งถ้าคุณกด^Cในช่วงเวลาเพียงเสี้ยววินาทีที่มนุษย์ไม่สามารถมองเห็นได้ในระหว่างการเชื่อมต่ออีกครั้งคุณสามารถฆ่าสคริปต์แทนการส่ง^Cผ่านไปยังสถานีลูกค้าดังนั้นหากคุณสงสัยว่าการเชื่อมต่อหยุดชะงัก อย่าบด^Cอย่างแรงเกินไป

โซลูชันซอฟต์แวร์เพิ่มเติมที่ง่ายที่สุด

คุณสามารถลองใช้โปรแกรมautosshซึ่งควรมีอยู่ในที่เก็บแพ็คเกจ Ubuntu ของคุณ

หากคุณจำเป็นต้องสร้างจากแหล่งที่มาหรือการตรวจสอบมันเป็นโปรแกรม C เดียวที่รวบรวมโดยไม่ต้องห้องสมุดเพิ่มเติมใด ๆ เป็นการอ้างอิงดูเหมือนว่าจะมีความฉลาดมากขึ้นเกี่ยวกับการตรวจสอบความมีชีวิตชีวาการเชื่อมต่อมากกว่าสับของฉันข้างต้นและมันก็มาพร้อมกับความสะดวกสบายrscreenคำสั่งสคริปต์ซึ่งอัตโนมัติ -attaches screenไป

รายละเอียด

วิธีการsshกู้คืนปกติ

เพียงเพื่อตรวจสอบเพราะฉันไม่ชอบพูดสิ่งต่าง ๆ โดยไม่ต้องตรวจสอบตัวเองฉันวิ่งทดสอบเล็กน้อยก่อนตอบ:

ฉันได้บนอินเตอร์เน็ตไร้สายของฉันกับอุปกรณ์ลินุกซ์ทำให้การเชื่อมต่อ SSH ไปยังอุปกรณ์อื่นบน LAN ของฉันตรวจสอบผมมีการทำงานsshเชื่อมต่อกับส่วนอื่น ๆ (อาจเรียกใช้คำสั่ง ฯลฯ ) แล้วที่ลูกค้ายกเลิกการเชื่อมต่อ Wi-Fi (ก่อให้เกิดการอินเตอร์เฟซ ที่จะยกเลิกการกำหนดค่า: ไม่มีที่อยู่ IP เพิ่มเติมพิมพ์ตัวอักษรจำนวนมากลงในเซสชัน ssh (ไม่มีการตอบสนองแน่นอน) จากนั้นเชื่อมต่อกับ WiFi อีกครั้ง - การเชื่อมต่อใหม่ล้มเหลวอย่างน้อยหนึ่งครั้งเนื่องจากสัญญาณไม่ดีและปัจจัยอื่น ๆ จากนั้นในที่สุดการเชื่อมต่ออีกครั้ง: ฉันรอประมาณห้าวินาทีเพื่อให้sshเซสชันกู้คืนไม่มีอะไรเกิดขึ้นดังนั้นฉันจึงกดปุ่มอีกหนึ่งปุ่มและsshเซสชันกลับมามีชีวิตอีกครั้งในทันทีโดยมีปุ่มทั้งหมดที่ฉันพิมพ์ในระหว่างการยกเลิกการเชื่อมต่อ

ดูsshเพียงเขียน / อ่านลงในซ็อกเก็ตเครือข่าย TCP จนกว่า OS จะบอกว่ามีบางอย่างผิดปกติและ TCP นั้นทนต่อการเชื่อมต่อที่ยืดเยื้อเป็นเวลานาน

ปล่อยให้อุปกรณ์ของตัวเองมีการตั้งค่าเคอร์เนลเริ่มต้นสแต็ค TCP ใน Linux จะยอมรับการเชื่อมต่อที่เงียบสนิทเป็นเวลาหลายนาทีก่อนที่จะประกาศการเชื่อมต่อที่ตายแล้วและรายงานข้อผิดพลาดถึงssh- ในที่สุดเมื่อเรายอมแพ้ ประมาณ ~ 30 นาทีหรืออย่างน้อยก็นานพอที่จะอยู่ได้นานกว่าการเชื่อมต่อ hiccups นานสองหรือหนึ่งนาที

ภายใต้ฝาครอบ Linux TCP stack จะพยายามส่งข้อความที่มีความล่าช้านานขึ้นเรื่อย ๆ ซึ่งหมายความว่าเมื่อถึงเวลาที่การเชื่อมต่อของคุณกลับมาคุณอาจมองล่าช้าเพิ่มเติมก่อนที่sshเซสชันของคุณจะกลับมา "มีชีวิต" อีกครั้ง

ทำไมบางครั้งถึงแตก

บ่อยครั้งสิ่งที่ทำให้การเชื่อมต่อปิดหลังจากที่ไม่มีการใช้งานในช่วงเวลาสั้นลงอย่างมีนัยสำคัญกว่าจำนวนที่สแต็ก TCP จะทนและจากนั้นไม่สามารถรายงานสถานะการเชื่อมต่อนั้นไปยังsshไคลเอนต์ของคุณ

ผู้สมัครที่มีแนวโน้มรวมถึง:

  1. ไฟร์วอลล์หรือเราเตอร์ NAT'ing ซึ่งต้องใช้หน่วยความจำเพื่อจดจำการเชื่อมต่อ TCP ที่ใช้งานจริงแต่ละครั้ง - เป็นการเพิ่มประสิทธิภาพและลดการโจมตีของ DOS บางครั้งพวกเขาจะลืมการเชื่อมต่อของคุณและจากนั้นมองข้ามแพ็กเก็ตตามมาอย่างเงียบ ๆกึ่งกลางของการเชื่อมต่อเมื่อคุณจำการเชื่อมต่อที่มีอยู่ดูไม่ถูกต้อง

  2. ไฟร์วอลล์ / เราเตอร์ที่ทำงานได้ดีกว่าจะฉีดแพ็กเก็ต TCP RST ซึ่งโดยทั่วไปจะปรากฏเป็นconnection reset by peerข้อความแสดงข้อผิดพลาด แต่แพ็คเก็ตรีเซ็ตนั้นเป็นไฟและลืมดังนั้นหากการเชื่อมต่อกับไคลเอ็นต์ของคุณยังคงมีปัญหาในขณะนั้น รีเซ็ตแพ็คเก็ตด้วยเช่นกันลูกค้าของคุณจะคิดว่าการเชื่อมต่อยังมีชีวิตอยู่

  3. เซิร์ฟเวอร์เองอาจมีนโยบายไฟร์วอลล์เพื่อทิ้งแพ็กเก็ตที่ไม่คาดคิดซึ่งจะทำให้การเชื่อมต่อของลูกค้าพยายามกลับมาทำงานใหม่เมื่อใดก็ตามที่เซิร์ฟเวอร์คิดว่าการเชื่อมต่อถูกปิด แต่ลูกค้าไม่ทำเช่นนั้น: ไคลเอ็นต์ของคุณพยายามเชื่อมต่อต่อไป ไม่ต้องสนใจเนื่องจากไม่มีการเชื่อมต่อแบบสดๆที่แพ็กเก็ตเหล่านี้อยู่ในสถานะไฟร์วอลล์ของเซิร์ฟเวอร์

    เนื่องจากคุณใช้งาน Linux ให้ตรวจสอบเซิร์ฟเวอร์ของคุณอย่างระมัดระวังiptables/ ip6tables(หรือnftหากคุณกำลังใช้สิ่งใหม่) สำหรับสิ่งที่คุณอนุญาตและทำหล่น เป็นเรื่องธรรมดามากที่จะอนุญาตให้ใหม่ / ที่สร้างขึ้น / ที่เกี่ยวข้องกับแพ็คเก็ตบนพอร์ต TCP SSH แต่ไม่ใช่ "ไม่ถูกต้อง" - ถ้าคุณทิ้งทุกอย่างที่ไม่ได้รับอนุญาตการตั้งค่าทั่วไปนี้อาจทำให้เกิดการค้างเหล่านี้ .

  4. เซิร์ฟเวอร์ SSH ของคุณอาจได้รับการกำหนดค่าให้ปิดการเชื่อมต่อหลังจากไม่มีการใช้งานเป็นระยะเวลาหนึ่งโดยใช้หนึ่งในตัวเลือก OpenSSH สำหรับ TCP หรือ SSH ไคลเอ็นต์แบบแพ็คเก็ตแบบคงที่ ด้วยตัวเองสิ่งนี้จะไม่ทำให้เกิดการแฮงไม่ จำกัด แต่สามารถทำให้คุณอยู่ในสถานะใดรัฐหนึ่งที่อธิบายไว้ข้างต้น

  5. เป็นไปได้ว่าคุณไม่ได้ให้เวลามากพอที่จะ "ปลดหู" ด้วยตัวเองหลังจากที่คุณเข้าสู่สถานะที่sshเซสชันของคุณวางสาย

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