Cách để tránh thời gian chờ kết nối ssh & đóng băng của thiết bị đầu cuối Gnome


235

Khi tôi kết nối qua ssh với một số máy chủ nhất định, nó sẽ hết thời gian và "đóng băng" thiết bị đầu cuối (không chấp nhận đầu vào, không ngắt kết nối, không thể Ctrl-C để giết tiến trình ssh hoặc bất cứ điều gì).

Điều này có trong Ubuntu gnome-terminalmặc dù dường như nó đang tạm dừng đầu vào / đầu ra của thiết bị đầu cuối và không ảnh hưởng đến hoạt động của chính phần mềm Gnome Terminal. Vì vậy, ít lỗi gnome-terminalhơn là một mâu thuẫn khó chịu với ssh.

Vì vậy, có cách nào để ngăn chặn / lấy lại thiết bị đầu cuối từ các kết nối ssh đã hết thời gian không?


Câu trả lời:


256

sshd (máy chủ) sẽ đóng kết nối nếu nó không nghe thấy gì từ máy khách trong một thời gian. Bạn có thể yêu cầu khách hàng của mình gửi tín hiệu đăng nhập đến máy chủ một lần.

Các cấu hình cho điều này là trong các tập tin ~/.ssh/config. Để gửi tín hiệu cứ sau bốn phút đến remotehost, hãy đặt phần sau vào ~/.ssh/config.

Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240

Đây là những gì tôi có trong tôi ~/.ssh/config.

Để kích hoạt nó cho tất cả các máy chủ sử dụng:

Host *
  ServerAliveInterval 240

Cũng đảm bảo chạy chmod 600 ~/.ssh/config, vì tệp cấu hình không được đọc trên thế giới.


1
Cảm ơn sblair đã giúp tôi từ ngữ, nó rất được đánh giá cao. Tôi đã thay đổi "không nên" trở lại "không được" vì ssh kiểm tra các quyền của tệp và nếu nó là thế giới hoặc nhóm có thể đọc được thì thất bại.
Ludwig Weinzierl

1
Đây không phải là những gì OP yêu cầu. Anh ấy không bị đá vì không hoạt động. Anh ta đang cố gắng kết nối và thiết bị đầu cuối của anh ta đang đóng băng.
Cerin

Đây là ~/.ssh/configđâu
Người dùng

1
@User '~ /' đại diện cho thư mục nhà của bạn. '.ssh' là một thư mục trong thư mục nhà của bạn.
wkm

6
điều này là vô ích nếu kết nối của bạn thực sự bị mất ...
so12311

248

Bấm Enter, ~, .một sau khi khác để ngắt kết nối từ một phiên đông lạnh.

Phần "CÁC ĐẶC ĐIỂM ESCAPE" trong trang ssh man giải thích các chi tiết cơ bản.


40
Câu trả lời này xuất hiện với tôi để trả lời chính xác hơn câu hỏi, và trong mọi trường hợp, là câu trả lời tôi đang tìm kiếm.
CoatedMoose

Lưu ý rằng bạn cần phải bỏ ghi chú dòng EscapeChar ~trong /etc/ssh/ssh_config(hoặc ~/.ssh/ssh_confignếu bạn thích).
MP Aditya

@adityamenon Không, EscapeChar ~đã là mặc định tích hợp sẵn.
Peter Eisentraut

2
@Mark câu hỏi đặt ra "có cách nào để ngăn chặn thiết bị đầu cuối khỏi các kết nối ssh đã hết thời gian không?" Nhấn mạnh mỏ.
CoatedMoose

2
Mặc dù nó không chính xác trong bối cảnh của câu hỏi, đây chính xác là những gì tôi muốn.
Subin Sebastian

38

Ngay cả tho đây không phải là một câu trả lời trực tiếp cho câu hỏi của bạn, nó rất liên quan đến vấn đề bạn gặp phải. Thay vì cố gắng duy trì kết nối (tất cả các kết nối cuối cùng đều chết), bạn có thể sử dụng bộ ghép kênh đầu cuối, như thế screentmuxgiữ cho phiên hoạt động ở chế độ nền ngay cả khi thiết bị đầu cuối của bạn bị ngắt kết nối.

Về cơ bản khi bạn đăng nhập vào máy chủ SSH, bạn sẽ chạy ngay lập tức screenđể tạo và đính kèm một phiên mới:

$ screen

Sau đó, bạn tiếp tục và làm công việc của bạn với vỏ như bạn thường làm. Bây giờ nếu kết nối bị ngắt, khi bạn có thể quay lại trực tuyến và kết nối lại với máy chủ qua SSH, bạn sẽ nhận được một danh sách các phiên hiện tại với:

$ screen -ls

Để gắn lại vào một phiên:

$ screen -r <session>

nơi <session>là PID hoặc một tên phiên. Bạn sẽ được kết nối lại với phiên của bạn và bạn có thể tiếp tục từ nơi bạn rời đi!

Bạn thậm chí có thể tách phiên và kết nối lại từ nhà để chọn từ điểm chính xác nơi bạn rời đi. Để tách phiên bạn sử dụng C-atheo sau C-d( Control + Ađó và sau đó Control + D).

hướng dẫn trực tuyến đơn giản là tốt.

Sử dụng screentmuxtrên các máy chủ từ xa được coi là một thực tiễn tốt nhấtrất được khuyến khích . Một số người đi xa như có screenvỏ đăng nhập mặc định của họ, vì vậy khi họ kết nối, họ ngay lập tức bắt đầu một screenphiên mới .


2
một cách khác là sử dụng mosh: mosh.mit.edu
Zombies

Điều này đặc biệt hữu ích nếu bạn đang sử dụng một điểm phát sóng hoặc wifi thỉnh thoảng bị mất.
Randall

11

Hãy thử nối -o ServerAliveInterval=30vào chuỗi kết nối của bạn ( 30có nghĩa là 30 giây và tất nhiên có thể được điều chỉnh)


5

Bạn cũng có thể đặt khoảng thời gian chờ không hoạt động từ phía máy chủ SSH:

Tập tin: /etc/ssh/ssh_config

Nội dung:

ClientAliveInterval XX
ClientAliveCountMax YY

Điều này hoạt động theo cách chính xác giống như cài đặt máy khách, nhưng các gói null được gửi từ máy chủ, thay vì máy khách.

Trích từ:

http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html


1

Đối với những người muốn ngăn khách hàng hết thời gian ở nơi đầu tiên.

Bạn có thể thử thiết lập ConnectTimeout 0trong tập tin cấu hình. Giá trị 0 có nghĩa là kết nối sẽ được duy trì vô thời hạn trừ khi đóng.

tập tin cấu hình (hoặc ssh_config) của bạn có thể trông như thế này:

Host *
   ConnectTimeout 0
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.