Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> สมาร์ทโฟน >> Linux

วิธีป้องกัน SSH Session ตัดการเชื่อมต่อเมื่อ Idle

คู่มือนี้แนะนำวิธีตั้งค่า SSH Client/Server ให้ส่ง Keep-Alive ป้องกันการตัดการเชื่อมต่อเมื่อไม่ได้ใช้งาน (Idle timeout)

สาเหตุของการตัดการเชื่อมต่อ

  • Firewall/NAT ตัด Connection ที่ Idle นานเกินไป (ปกติ 5-15 นาที)
  • SSH Server ตั้งค่า ClientAliveInterval ต่ำเกินไป
  • Network equipment ตัด TCP connection ที่ไม่มี traffic

วิธีที่ 1: ตั้งค่า SSH Client (ฝั่งผู้ใช้ - แนะนำ)

แก้ไข ~/.ssh/config (สร้างใหม่ถ้ายังไม่มี):

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3
  • ServerAliveInterval 60 - ส่ง Keep-alive ทุก 60 วินาที
  • ServerAliveCountMax 3 - หากไม่ได้รับตอบ 3 ครั้งติด = 切断 (รวม ~3 นาที)
  • ต้องเว้นวรรค (indent) บรรทัดที่ 2-3

วิธีที่ 2: ตั้งค่า SSH Server (ฝั่งเซิร์ฟเวอร์)

แก้ไข /etc/ssh/sshd_config:

ClientAliveInterval 60
ClientAliveCountMax 3

จากนั้นรีสตาร์ท SSH:

# systemctl restart sshd
# หรือ
# /etc/init.d/sshd restart

ความแตกต่าง ClientAlive vs ServerAlive

แนะนำตั้งค่าทั้งคู่ เพื่อความแน่ใจ (Double protection)

ตัวเลือกเพิ่มเติมใน ~/.ssh/config

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3
    TCPKeepAlive yes
    Compression yes
    ControlMaster auto
    ControlPath ~/.ssh/control-%r@%h:%p
    ControlPersist 10m
  • ControlMaster auto - ใช้ Connection เดียวสำหรับหลาย Session (Multiplexing) เร็วขึ้นมาก
  • ControlPersist 10m - เก็บ Master connection ไว้ 10 นาทีหลังปิด session สุดท้าย

ทดสอบ

# ทดสอบว่า Keep-alive ส่งออกไปจริง
ssh -v user@server  # ดู debug: "Server alive interval: 60"

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

การตั้งค่าฝั่งส่ง Keep-alive ไป
ServerAliveIntervalClientServer
ClientAliveIntervalServerClient