การหมดเวลาเริ่มต้นที่ไม่ได้ใช้งานของ OpenSSH คืออะไร


25

ฉันไม่สามารถหาคำตอบสำหรับคำถามง่าย ๆ นี้ได้ซึ่งฉันต้องการเอกสารประกอบการปฏิบัติตาม

ในการติดตั้งเริ่มต้นของ CentOS 6.5 (OpenSSH 5.3p1-94.el6) หลังจากช่วงเวลาที่ไม่ได้ใช้งานเซสชัน SSH ของผู้ใช้จะถูกยกเลิกหรือไม่ ฉันเชื่อว่าสามารถตั้งค่าต่อไปนี้เพื่อเพิ่มการหมดเวลาที่ไม่ได้ใช้งาน แต่จะถูกใส่ความคิดเห็นโดยค่าเริ่มต้น

$ grep -i alive /etc/ssh/sshd_config
#TCPKeepAlive yes
#ClientAliveInterval 0
#ClientAliveCountMax 3

นอกจากนี้ยังมีคำสั่งให้ทิ้งรายการการsshdตั้งค่าปัจจุบันหรือไม่? ฉันไม่เห็นอะไรman sshdเลย


3
เชลล์บางตัวสามารถตั้งค่าให้ออกหลังจากหมดเวลาได้ ซึ่งจะทำให้เซสชัน ssh สิ้นสุดลง ตรวจสอบว่าตัวแปรสภาพแวดล้อม TMOUT ของคุณถูกตั้งค่า
Kenster

คำตอบ:


23

บรรทัดที่คอมเม้นต์sshd_configมักจะแสดงค่าเริ่มต้น นี่คือกรณีที่มีทุกบรรทัดในคำถามของคุณ คุณสามารถตรวจสอบในmanpagesshd_config นี่คือตัวอย่างที่เกี่ยวข้อง:

TCPKeepAlive

      ระบุว่าระบบควรส่งข้อความ TCP keepalive ไปอีกด้านหนึ่งหรือไม่ หากมีการส่งการเชื่อมต่อหรือความผิดพลาดของหนึ่งในเครื่องจะสังเกตเห็นได้อย่างถูกต้อง อย่างไรก็ตามนี่หมายความว่าการเชื่อมต่อจะตายหากเส้นทางหยุดชั่วคราวและบางคนพบว่ามันน่ารำคาญ ในทางกลับกันหากไม่ได้ส่งการรักษา TCP ไว้เซสชันอาจหยุดการทำงานชั่วคราวบนเซิร์ฟเวอร์โดยปล่อยผู้ใช้“ โกสต์” และใช้ทรัพยากรเซิร์ฟเวอร์

      ค่าเริ่มต้นคือ“ ใช่” (เพื่อส่งข้อความ TCP keepalive) และเซิร์ฟเวอร์จะสังเกตเห็นว่าเครือข่ายล่มหรือโฮสต์ไคลเอ็นต์ขัดข้อง สิ่งนี้จะช่วยหลีกเลี่ยงการเซสชันที่ไม่สิ้นสุด

      ในการปิดใช้งานข้อความ TCP keepalive ค่าควรถูกตั้งค่าเป็น "ไม่"

      KeepAliveตัวเลือกนี้จะถูกเรียกว่าเดิม

ClientAliveCountMax

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

      ค่าเริ่มต้นคือ 3 หากClientAliveInterval(ดูด้านล่าง) ตั้งไว้ที่ 15 และClientAliveCountMaxปล่อยไว้ที่ค่าเริ่มต้นไคลเอ็นต์ SSH ที่ไม่ตอบสนองจะถูกยกเลิกการเชื่อมต่อหลังจากผ่านไปประมาณ 45 วินาที ตัวเลือกนี้ใช้กับโปรโตคอลรุ่น 2 เท่านั้น

ClientAliveInterval

      ตั้งค่าช่วงเวลาหมดเวลาเป็นวินาทีหลังจากนั้นหากไม่ได้รับข้อมูลจากลูกค้าsshd (8)จะส่งข้อความผ่านแชนเนลที่เข้ารหัสเพื่อร้องขอการตอบสนองจากลูกค้า ค่าเริ่มต้นคือ 0 ระบุว่าข้อความเหล่านี้จะไม่ถูกส่งไปยังลูกค้า ตัวเลือกนี้ใช้กับโปรโตคอลรุ่น 2 เท่านั้น


1
แก้ไขให้ฉันถ้าผิด แต่ถ้าไม่มีไฟร์วอลล์อยู่ระหว่างตัวฉันและเครื่อง (ด้วยค่าเริ่มต้น) แล้วฉันจะไม่ถูกตัดการเชื่อมต่อหรือไม่? ฉันรู้ว่าไฟร์วอลล์ของเราลดการเชื่อมต่อ TCP ที่ไม่ได้ใช้งานหลังจากผ่านไป 60 นาทีดังนั้นนั่นจึงเป็นสิ่งที่เกิดขึ้น ฉันแค่ต้องการตรวจสอบและดูว่า OpenSSH ปิดเซสชันอย่างชัดเจนหรือไม่ ฉันคิดว่าคำตอบคือไม่ openssh ไม่ได้ปิดการเชื่อมต่อที่ไม่ได้ใช้งาน แต่ไฟร์วอลล์มักจะทำ การตั้งค่าที่กล่าวถึงในคำตอบของคุณจริง ๆ แล้วช่วยในการคงการเชื่อมต่อหรือยกเลิกเซสชั่นอย่างถูกต้องหากเห็นว่ามันถูกทิ้ง
Banjer

2
ข้อความที่ยกมาบอกว่าค่าเริ่มต้นสำหรับ ClientAliveInterval คือ 0 ซึ่งหมายความว่ามันไม่ได้กำหนดช่วงเวลาที่การเชื่อมต่อเปิดอยู่ แต่เรารู้ว่าช่วงเวลานั้นมีค่า จำกัด โดยปริยาย ดังนั้นจึงดูเหมือนว่าจะต้องมีพารามิเตอร์อื่น ๆที่กำหนดระยะเวลาที่การเชื่อมต่อเปิดตามค่าเริ่มต้น หากการวิเคราะห์ของฉันถูกต้องสมมติว่าทั้งเซิร์ฟเวอร์และไคลเอนต์เป็นเครื่อง linux ที่ใช้ openssh และทั้งคู่กำลังใช้ค่าเริ่มต้นทั้งหมด ในกรณีนี้ด้านใดที่ตั้งค่าเริ่มต้นค่าของมันคืออะไรและตั้งอยู่ที่ไหน
Ben Crowell

2
@BenCrowell และเรารู้ว่าช่วงเวลามีค่า จำกัด โดยค่าเริ่มต้น ช่วงเวลาใดและคุณรู้ได้อย่างไร
Piotr Dobrogost

9

คุณสามารถตั้งค่า SSH keepalive สำหรับฝั่งไคลเอ็นต์หรือเซิร์ฟเวอร์:

ด้านลูกค้า

ไฟล์: /etc/ssh/ssh_config

เนื้อหา:

Host *
ServerAliveInterval XX
ServerAliveCountMax YY

ฝั่งเซิร์ฟเวอร์

ไฟล์: /etc/ssh/sshd_config

เนื้อหา:

ClientAliveInterval XX
ClientAliveCountMax YY

สกัดจาก: http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html


6
มีประโยชน์ แต่ไม่ตอบคำถาม แต่อย่างใด
bzeaman

6

OpenSSH จะไม่ยุติเชลล์เซสชันที่ไม่ได้ใช้งานเป็นระยะเวลาหนึ่ง นี่ไม่ใช่สิ่งที่ OpenSSH ทำ การยุติเซสชันเชลล์ที่ไม่ทำงานจะไม่เกี่ยวข้องกับการกำหนดค่าของ OpenSSH

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

เชลล์ของรีโมตโฮสต์อาจยกเลิก (หรืออาจถูกฆ่าโดยกระบวนการอื่น) หลังจากผ่านไประยะเวลาที่ไม่ได้ใช้งาน แต่สิ่งนี้ไม่เกี่ยวข้องกับการกำหนดค่าของบริการ SSH บนเซิร์ฟเวอร์และไคลเอ็นต์ SSH ของคุณ

ที่เกี่ยวข้อง:


หากต้องการดัมพ์การsshdกำหนดค่าให้ใช้ "โหมดการทดสอบเพิ่มเติม" ในฐานะรูท:

sshd -T

นี้ถูกบันทึกไว้ในคู่มือ (มองไปที่บน OpenBSD ที่นี่):sshd(8)OpenSSH_7.7, LibreSSL 2.7.2

-T

โหมดการทดสอบเพิ่มเติม ตรวจสอบความถูกต้องของแฟ้มการกำหนดค่าการส่งออกการกำหนดค่าที่มีประสิทธิภาพเพื่อ stdout แล้วออกจาก อาจเลือกใช้กฎการจับคู่โดยระบุพารามิเตอร์การเชื่อมต่อโดยใช้หนึ่ง-Cตัวเลือกหรือมากกว่า

ตัวเลือกนี้ถูกเพิ่มในsshdสำหรับ OpenSSH 5.1 / 5.1p1 ในปี 2008


3

หากความต้องการคือการปิดการเชื่อมต่อ SSH หลังจากช่วงเวลาที่ไม่มีการใช้งานเปลือกหอยตัวเองให้ตัวแปรหมดเวลา

สำหรับทุบตี:

TMOUT: หากตั้งค่าเป็นศูนย์มากกว่า TMOUT จะถือว่าเป็นค่าหมดเวลาเริ่มต้นสำหรับการอ่าน builtin คำสั่ง select จะยุติหากอินพุตไม่มาถึงหลังจาก TMOUT วินาทีเมื่ออินพุตมาจากเทอร์มินัล ในเชลล์เชิงโต้ตอบค่าจะถูกตีความเป็นจำนวนวินาทีเพื่อรออินพุตหลังจากออกพรอมต์หลัก Bash จะหยุดทำงานหลังจากรอจำนวนวินาทีนั้นหากอินพุตไม่มาถึง

ทดสอบโดยเรียกใช้TMOUT=10และรอ 10 วินาทีเพื่อปิดการเชื่อมต่อ

สำหรับ tcsh:

ตัวแปร autologout shell สามารถตั้งค่าให้ออกจากระบบหรือล็อคเชลล์หลังจากไม่มีการใช้งานเป็นจำนวนนาที

ใน tcsh ไวยากรณ์สำหรับการตั้งค่าการหมดเวลาสิบนาทีset autologout=10เป็น สิ่งนี้ใช้ไม่ได้ใน csh ดั้งเดิม


-2

หากคุณต้องการให้การหมดเวลาเป็น 10 วินาทีสำหรับทุกคนให้ทำดังต่อไปนี้สำหรับการกำหนดค่าเซิร์ฟเวอร์ (sshd_config):

ClientAliveInterval 10
ClientAliveCountMax 0

หากคุณต้องการให้การหมดเวลาเป็น 10 วินาทีสำหรับไคลเอ็นต์ในระบบให้ทำดังต่อไปนี้สำหรับการกำหนดค่าไคลเอนต์ (ssh_config):

ServerAliveInterval 10
ServerAliveCountMax 0

หากพารามิเตอร์ AliveCountMax ไม่ใช่ศูนย์อาจไม่ทำงานเนื่องจากเซิร์ฟเวอร์จะตอบการรีเซ็ตตัวจับเวลา (เว้นแต่จะมีปัญหาการเชื่อมต่อ) คุณสามารถเห็นสิ่งนี้ได้โดยการเรียกใช้ไคลเอ็นต์ ssh โดยเปิดการดีบัก

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