เทอร์มินัลหยุดทำงานเมื่อการเชื่อมต่อที่หายไปและ ssh เปิดอยู่


18

เมื่อฉัน ssh ไปยังเซิร์ฟเวอร์ผ่านอินเทอร์เน็ตในแท็บเทอร์มินัล gnome ถ้าฉันขาดการเชื่อมต่ออินเทอร์เน็ตแท็บเทอร์มินัลจะหยุดทำงานและไม่ยอมรับอินพุตใด ๆ ทำไมถึงแขวน

มีวิธีการเปิดใช้งานแท็บเทอร์มินัลบ้างหรือไม่นั่นคือทำให้มันใช้งานกระบวนการเชลล์ในเครื่องต่อไปหรือไม่

การปิดแท็บเทอร์มินัลเป็นวิธีเดียวหรือไม่

คำตอบ:


20

การเชื่อมต่อ SSH จะลดลงโดยอัตโนมัติหลังจากช่วงเวลาที่กำหนดClientAliveIntervalและClientAliveCountMaxพารามิเตอร์และการเทียบเท่าฝั่งไคลเอ็นต์ หากหมดเวลาเหล่านี้ค่อนข้างสูงคุณจะได้สัมผัสกับกระสุนแข็ง อย่างไรก็ตามหากคุณใช้OpenSSHคุณไม่ต้องรอหมดเวลาและสามารถบังคับปิดการเชื่อมต่อโดยใช้อักขระเลี่ยง :

ESCAPE CHARACTERS
When a pseudo-terminal has been requested, ssh supports a number
of functions through the use of an escape character.  A single
tilde character can be sent as ~~ or by following the tilde by a
character other than those described below. The escape character
must always follow a newline to be interpreted as special. The
escape character can be changed in configuration files using the
EscapeChar configuration directive or on the command line by the
-e option.
The supported escapes (assuming the default ‘~’) are:

~.
    Disconnect.
(...)

เมื่อการเชื่อมต่อค้างกด~(ที่หมายถึงShift+ `ปุ่มพร้อมกัน) .ปล่อยมันและกด หรือถ้าคุณทำงานกับการเชื่อมต่อที่ไม่เสถียรหรือจำเป็นต้องเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลตลอดเวลาคุณสามารถใช้autosshเพื่อต่ออายุการเชื่อมต่อที่หายไปโดยอัตโนมัติมันสะดวกมาก

แก้ไข :

อย่างไรก็ตามหากทั้งสองClientAliveIntervalและServerAliveIntervalถูกตั้งค่าเป็น 0 อย่างชัดเจนหรือไม่ได้ตั้งค่าไว้อย่างชัดเจนและถูกตั้งค่าเป็น 0 โดยค่าเริ่มต้นตามsshd_configและssh_configmanpages การตั้งค่าการหมดเวลาถูกตั้งค่าในไฟล์ต่อไปนี้ (จากhttp://tldp.org/HOWTO/TCP- Keepalive-HOWTO / usingkeepalive.html ):

  # cat /proc/sys/net/ipv4/tcp_keepalive_time
  7200

  # cat /proc/sys/net/ipv4/tcp_keepalive_intvl
  75

  # cat /proc/sys/net/ipv4/tcp_keepalive_probes
  9

  The first two parameters are expressed in seconds, and the last is
  the pure number. This means that the keepalive routines wait for
  two hours (7200 secs) before sending the first keepalive probe,
  and then resend it every 75 seconds. If no ACK response is
  received for nine consecutive times, the connection is marked as
  broken.

คุณสามารถแก้ไข 3 ไฟล์เหล่านี้เพียงแค่ใช้echoและดูว่าตัวคุณเองนั้นเซสชัน SSH แบบน้ำแข็งถูกตัดการเชื่อมต่อตามค่าเหล่านี้


6
ฉันต้องการเพิ่ม ssh ให้จดจำอักขระการหลบหนีของมันในตอนแรกหรือหลังจากป้อน เมื่อการเชื่อมต่อ ssh ไม่ทำงาน Enter มักจะเป็นตัวอักษรสุดท้ายที่คุณกดไปก่อนหน้านี้เสมอ ดังนั้นมันอาจจะดีกว่าถ้าคุณคุ้นเคยกับEnter ~ .ลำดับการยุติการเชื่อมต่อ
egmont

ขอบคุณ ฉันยังไม่ชัดเจนว่า/proc/sys/net/ipv4/tcp_keepalive*ไฟล์ClientAliveIntervalและServerAliveInterval ทำงานร่วมกันได้อย่างไร พวกเขาทั้งหมดสำหรับการตั้งค่าเดียวกันคือเพื่อให้การเชื่อมต่อ SSH มีชีวิตอยู่? ไฟล์เก่าไม่ใช่แค่สำหรับการเชื่อมต่อ ssh แต่ยังเป็นการเชื่อมต่อ TCP อื่น ๆ หรือไม่?
StackExchange ทั้งหมด

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

@Tim: 1. /proc/sys/net/ipv4/tcp_keepalive*ไม่เพียงssh(d)แต่ตามที่กล่าวไว้ในเอกสารที่ฉันเชื่อมโยงกับ:Remember that keepalive support, even if configured in the kernel, is not the default behavior in Linux. Programs must request keepalive control for their sockets using the setsockopt interface. There are relatively few programs implementing keepalive, but you can easily add keepalive support for most of them following the instructions explained later in this document.
Arkadiusz Drabczyk

@Tim: 2. ค่อนข้างสูงหมายถึง 2 ชั่วโมงเช่น - คุณจะต้องรอ 2 ชั่วโมงก่อนที่จะยกเลิกการเชื่อมต่อ ทำให้การทดสอบ - เชื่อมต่อกับพื้นที่ห่างไกลฆ่าsshdในระยะไกลหรือถอดสายเคเบิลและตรวจสอบเมื่อมีการแช่แข็ง sshเซสชั่นจะออกด้วยตัวเอง โดยfrozen shellฉันหมายถึงเชลล์ที่ไม่ได้ใช้งานไม่มีปุ่มใด ๆ และไม่พิมพ์อะไรเลย
Arkadiusz Drabczyk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.