เชื่อมต่อการเชื่อมต่อ SSH ใหม่โดยอัตโนมัติด้วยเซสชัน 'หน้าจอ' ที่ระบุ


10

ฉันมักจะมีเทอร์มินัล windows หลายแห่งซึ่งแต่ละแห่งเชื่อมต่อผ่าน ssh ไปยังเซิร์ฟเวอร์ระยะไกล ในแต่ละหน้าต่างฉันทำงานโดยใช้โปรแกรมหน้าจอ gnu เพื่อให้แน่ใจว่ากระบวนการโต้ตอบในกรณีที่มีการขาดการเชื่อมต่อ

ขณะนี้เมื่อใดก็ตามที่การเชื่อมต่อ ssh ลดลง (เช่นเมื่อฉันทำให้คอมพิวเตอร์ไคลเอนต์ของฉันเข้าสู่โหมดสลีปค้างคืน) ฉันต้องรีสตาร์ทเซสชัน ssh ด้วยตนเองและน่าเบื่อภายในแต่ละหน้าต่างจากนั้นในแต่ละหน้าต่าง r 3453 "ในหน้าต่างเดียว" หน้าจอ -r 3462 "ในอีกหน้าต่างหนึ่ง)

มีวิธีที่สง่างามในการทำสิ่งนี้โดยอัตโนมัติหรือไม่? โดยเฉพาะ:

  • เชื่อมต่อเซสชั่น ssh อีกครั้งถ้ามันลดลงทันทีที่ตรวจพบการเชื่อมต่ออินเทอร์เน็ต

  • เรียกใช้อินสแตนซ์ของหน้าจอเฉพาะสำหรับหน้าต่างเทอร์มินัลทันทีที่ ssh เชื่อมต่อใหม่

ขอบคุณสำหรับเคล็ดลับใด ๆ เกี่ยวกับเรื่องนี้

คำตอบ:


10

คุณสามารถเรียกใช้สิ่งนี้: ssh -t hostname screen -r 3453เพื่อเชื่อมต่อใหม่ หากคุณต้องการที่จะทำมันในวงฉันใช้ต่อไปนี้ในสคริปต์

while true; do
    ssh -t -o BatchMode=yes eeepc-rsi "screen -r 3453"
    sleep 2
done

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


ขอบคุณ! "-o BatchMode = ใช่" มีไว้เพื่ออะไร?
GJ

มันจะช่วยให้คุณไม่ต้องถามรหัสผ่าน จาก 'man ssh_config': "การสอบถาม passphrase / password จะถูกปิดใช้งานตัวเลือกนี้มีประโยชน์ในสคริปต์และงานแบ็ตช์อื่น ๆ ที่ไม่มีผู้ใช้อยู่ในการจัดหารหัสผ่าน" ดังนั้นใช้มันเฉพาะเมื่อคุณมี ssh-keys ตั้งค่าไว้แล้ว
Jason Axelson

5

ไม่ต้องแฮ็คทุบตีลูป คุณต้องดูเป็นautossh ฉันไม่ได้ใช้มันมากนัก แต่ความเข้าใจของฉันคือคุณเพียงแค่แทนที่sshด้วยautosshคำสั่งของคุณ

แก้ไข: อันที่จริงแล้ว Autossh มาพร้อมกับสคริปต์ที่เรียกว่าrscreenดูเหมือนจะถูกออกแบบมาเพื่อวัตถุประสงค์นี้

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