autossh ไม่ฆ่า ssh เมื่อลิงก์ลง


10

ฉันได้เริ่มต้นการตรวจสอบอัตโนมัติด้วยเวลาโพล 30 วินาที:

AUTOSSH_POLL=30 AUTOSSH_LOGLEVEL=7 autossh -M 0 -f -S none -f -N -L localhost:34567:localhost:6543 user1@server1

และมันก็ทำงานได้ดี:

Sep  5 12:26:44 serverA autossh[20935]: check on child 23084
Sep  5 12:26:44 serverA autossh[20935]: set alarm for 30 secs

แต่ถ้าฉันถอดสายเคเบิลเครือข่ายทางกายภาพหมายถึงอุโมงค์ไม่สามารถทำงานได้อีกต่อไปการตรวจสอบอัตโนมัติจะไม่ฆ่า ssh daemon ทำไม? ฉันเข้าใจว่า autossh ไม่สามารถทำอะไรได้หากลิงก์ไม่ทำงาน แต่ในความคิดของฉันฉันควรลองทำสิ่งต่อไปนี้:

  1. ตรวจสอบกระบวนการ child ssh ( check on child ...)
  2. ตรวจสอบไกลสุด !!! (การดำเนินการเหมือน ping ผ่านอุโมงค์)
  3. ตระหนักดีว่าอุโมงค์ไม่ทำงาน
  4. หยุดกระบวนการ ssh
  5. ลองสร้างอุโมงค์อีกครั้ง
  6. ตระหนักดีว่ามันไม่ทำงานและตั้งค่าตัวจับเวลา (เพิ่มทวีคูณ?) เพื่อตรวจสอบอีกครั้งในไม่ช้า

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

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

แก้ไข

ตามที่ร้องขอฉันจะเพิ่มส่วนที่เกี่ยวข้องของการกำหนดค่า ssh:

# (see http://aaroncrane.co.uk/2008/04/ssh_faster)
# The ServerAliveInterval tells SSH to send a keepalive message every 60 seconds while the connection is open;
#   that both helps poor-quality NAT routers understand that the NAT table entry for your connection should
#   be kept alive, and helps SSH detect when there’s a network problem between the server and client.
ServerAliveInterval 60
# The ServerAliveCountMax says that after 60 consecutive unanswered keepalive messages, the connection should
#   be dropped. At that point, AutoSSH should try to invoke a fresh SSH client. You can tweak those
#   specific values if you want, but they seem to work well for me.
ServerAliveCountMax 60

TCPKeepAlive yes

สิ่งที่เกี่ยวกับการพยายามลดการหมดเวลา?
Nikolaidis Fotis

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

@NikolaidisFotis: หมดเวลาแล้ว มันคือ ... หมดเวลา แต่มันไม่ได้ทำในสิ่งที่ถูกต้อง (imho) ทุกครั้งที่หมดเวลาซึ่งก็คือ: ตรวจสอบความสุดยอด !
dangonfast

@NilsToedtmann: ขอบคุณฉันจะลองดู ใช้งานง่ายไหม? คุณมีลิงค์ไปยังวิธีการที่ดีหรือไม่?
dangonfast

OpenVPN นั้นค่อนข้างตรงไปตรงมาเราเพิ่งจะติดตั้งและเริ่มต้นด้วยการกำหนดค่าเริ่มต้นสำหรับเซิร์ฟเวอร์หรือไคลเอนต์โดยใช้dev tunทั้งในและตั้งค่าremoteในไคลเอนต์ บิตที่น่ารำคาญเพียงอย่างเดียวคือการจัดการใบรับรอง เราใช้ CA 'easy-rsa' ที่มาพร้อมกับ OpenVPN เมื่อคุณมีใบรับรองแล้วส่วนที่เหลือก็ง่าย
Nils Toedtmann

คำตอบ:


11

แต่ถ้าฉันถอดสายเคเบิลเครือข่ายทางกายภาพหมายถึงอุโมงค์ไม่สามารถทำงานได้อีกต่อไปการตรวจสอบอัตโนมัติจะไม่ฆ่า ssh daemon ทำไม?

autossh ทำงานบนเครื่องไคลเอนต์ของคุณดังนั้นจึงไม่สามารถฆ่ากระบวนการ ssh daemon บนเซิร์ฟเวอร์โดยตรง อย่างไรก็ตามคุณสามารถระบุค่าที่ไม่เป็นศูนย์สำหรับClientAliveIntervalใน/etc/ssh/sshd_configบนเซิร์ฟเวอร์ (ดูman sshd_config) และรีสตาร์ทเซอร์วิส sshd บนเซิร์ฟเวอร์เพื่อใช้การเปลี่ยนแปลงการกำหนดค่า จากนั้นในกรณีที่การตัดการเชื่อมต่อเครือข่ายกระบวนการ ssh daemon จะถูกฆ่าหลังจากไม่ClientAliveInterval * ClientAliveCountMaxกี่วินาที (แต่ไม่ใช่โดย autossh)

ทีนี้ถ้าคุณตั้งใจถามว่า "ทำไม Autossh ไม่ฆ่ากระบวนการลูกค้า ssh?" -M 0คุณได้ระบุ จากหน้า man autossh:

Setting the monitor port to 0 turns the monitoring function off, and autossh will only restart ssh upon ssh's exit.

แทนที่จะใช้ autossh เพื่อตรวจสอบการเชื่อมต่อคุณกำลังรอให้ ssh ออกหลังจากหมดเวลาไม่ServerAliveCountInterval * ServerAliveCountMaxกี่วินาที คุณได้ร้องขอการตรวจสอบเซิร์ฟเวอร์ 60 ครั้งก่อนที่จะออกจาก ssh โดยมีช่วงเวลา 60 วินาทีที่แยกการตรวจสอบที่ต่อเนื่องดังนั้นคุณจะรอหนึ่งชั่วโมงก่อนที่ไคลเอ็นต์ ssh ของคุณจะออก

คุณอาจลองใช้ExitOnForwardFailureตัวเลือกในฝั่งไคลเอ็นต์ (ดูman ssh_config) ดังนั้น ssh จะออกหากไม่สามารถสร้างช่องสัญญาณได้และจากนั้น autossh สามารถลองเรียกใช้ ssh อีกครั้ง


ขอบคุณมันสมเหตุสมผลแล้ว ฉันหมายถึง "กระบวนการลูกค้า" ไม่ใช่กระบวนการเซิร์ฟเวอร์
dangonfast

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