Tự động kết nối lại các kết nối SSH với phiên 'màn hình' cụ thể


10

Tôi thường có một số cửa sổ đầu cuối, mỗi cửa sổ được kết nối qua ssh đến một máy chủ từ xa. Trong mỗi cửa sổ tôi làm việc bằng cách sử dụng chương trình màn hình gnu, để đảm bảo sự bền bỉ của các quá trình tương tác trong trường hợp ngắt kết nối.

Hiện tại, bất cứ khi nào kết nối ssh giảm (chẳng hạn như khi tôi đặt máy tính khách ngủ qua đêm), tôi phải khởi động lại phiên ssh bên trong mỗi cửa sổ một cách thủ công và sau đó trong mỗi cửa sổ tiếp tục một cách tẻ nhạt phiên màn hình cụ thể (ví dụ: "màn hình - r 3453 "trong một cửa sổ," màn hình -r 3462 "trong cửa sổ khác, v.v.)

Có một cách thanh lịch để tự động hóa điều này? Đặc biệt:

  • kết nối lại phiên ssh nếu nó bị rớt, ngay khi phát hiện kết nối Internet

  • chạy phiên bản màn hình cụ thể cho cửa sổ terminal ngay khi ssh kết nối lại

Cảm ơn cho bất kỳ lời khuyên về điều này

Câu trả lời:


10

Bạn có thể chạy này: ssh -t hostname screen -r 3453để kết nối lại. Nếu bạn muốn làm điều đó trong một vòng lặp, tôi sử dụng như sau trong một kịch bản.

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

Điều này hoạt động tốt nhất nếu bạn có thiết lập phím ssh để bạn có thể đăng nhập mà không cần nhập mật khẩu. Tôi cũng khuyên bạn nên xem tmux, một triển khai màn hình hiện đại hơn. Tôi thực sự sử dụng kịch bản trên với màn hình. Bạn cũng có thể muốn sử dụng một phiên màn hình được đặt tên thay vì chỉ sử dụng pid như bạn làm trong ví dụ của mình.


Cảm ơn! Chính xác thì "-o BatchMode = yes" để làm gì?
GJ.

Nó sẽ cho phép bạn không nhắc mật khẩu. Từ 'man ssh_config': "truy vấn mật khẩu / mật khẩu sẽ bị vô hiệu hóa. Tùy chọn này hữu ích trong các tập lệnh và các công việc hàng loạt khác mà không có người dùng nào có mặt để cung cấp mật khẩu." Vì vậy, chỉ sử dụng nó nếu bạn đã thiết lập ssh-key.
Jason Axelson

5

Không cần phải hack các vòng lặp bash. Bạn cần nhìn vào autossh . Tôi đã không sử dụng nó nhiều cho bản thân mình, nhưng sự hiểu biết của tôi là bạn chỉ cần thay thế sshbằng autosshlệnh của bạn.

Chỉnh sửa: Trong thực tế, autossh đi kèm với một tập lệnh được gọi là rscreendường như được thiết kế cho mục đích chính xác này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.