Tại sao thời gian chờ ssh của tôi thay đổi theo vị trí mạng?


15

Khi tôi vào một trong các máy chủ văn phòng của chúng tôi (chạy Fedora 10) tại nhà, phiên của tôi sẽ hết giờ sau một thời gian hoạt động khá ngắn (5 phút hoặc lâu hơn). Tôi đã thử sử dụng TcpKeepAliveở phía khách hàng, không có hiệu quả.

Điều tôi không hiểu là nếu tôi ở văn phòng trên mạng LAN của công ty, tôi có thể để một phiên không hoạt động cả ngày mà không hết giờ, vì vậy hành vi dường như phụ thuộc vào vị trí của tôi.

Có ai biết tại sao điều này lại xảy ra không và làm cách nào để hết thời gian chờ khi tôi không vào mạng LAN? Tôi đang sử dụng máy khách Terminal trên Mac OSX nếu điều đó có ích.

CẬP NHẬT - Đề xuất của Dave Drager về việc sử dụng bộ ServerAliveIntervalthành khác không với TcpKeepAlive=nocông việc của tôi. Về một số câu trả lời khác, ClientAlive... cài đặt không được máy khách Mac OSX SSH chấp nhận.

Câu trả lời:


6

Có một bài viết tốt về vấn đề này ở đây .

Họ đề xuất:

ssh -o TCPKeepAlive=yes

hoặc là:

ssh -o TCPKeepAlive=no -o ServerAliveInterval=15

Tuy nhiên, tôi có một vấn đề tại trang web làm việc của tôi, nơi tôi bị ngắt kết nối từ các phiên, ở nhà họ vẫn ổn. Tôi tin rằng tường lửa của tôi (SonicWall) có thể bị lỗi với TCPKeepAlive, có thể là do NAT.

Máy khách SSH của tôi, SecureCRT, may mắn thay, có một tùy chọn cho giao thức "NO-OP", mà tôi tin rằng về cơ bản sẽ gửi một lệnh không làm gì cho máy chủ. Bằng cách kích hoạt thủ công này, tôi có thể duy trì kết nối. Không chắc chắn máy khách đầu cuối MacOSX có gì tương tự như vậy. Có một bài viết về cách thực hiện "NO-OP" trên dòng lệnh.

Cuối cùng, bạn có thể muốn sử dụng Wireshark hoặc trình thám thính khác để xem kết nối TCP thực tế của bạn để tìm hiểu điều gì đang xảy ra với nó. Đó sẽ là cách cuối cùng để xem tại sao nó vẫn thỉnh thoảng ngắt kết nối.


Cảm ơn, Dave - tùy chọn ServerAliveInterval đã hoạt động rất tốt.
gareth_bowles

@Dave Tôi đã nghe nói rằng một số quản trị viên máy chủ cau mày với thực tiễn này vì nó có thể là (a) rủi ro bảo mật hoặc (b) tải máy chủ không chính đáng. Là một trong những mối quan tâm này hợp lệ, IYHO?
Ngày Jonathan

Đây là một cài đặt trên điểm cuối của máy khách, vì vậy mặc dù nếu bạn ở trong môi trường thù địch, điều này có thể làm tăng khả năng ai đó giả mạo bạn, rất khó có khả năng ảnh hưởng đến bảo mật của kết nối. Tôi thực sự không thể thấy điều này gây ra tải thêm.
Dave Drager

@D: Tôi pkcs11] [-i nhận dạng_file] [-L [bind_address:] port: host: hostport] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o tùy chọn] [-p port] [-R [ bind_address:] port: host: hostport] [-S ctl_path] [-W host: port] [-w local_tun [: remote_tun]] [user @] hostname [lệnh]
user1050619

Khắc phục sự cố này cũng làm việc cho PuTTY. Tùy chọn duy nhất tôi phải đặt là trong Kết nối -> Giây giữa Keepalive: 15. Phiên SSH đã hoạt động và hoạt động tốt hơn 8 giờ (Comcast), trong khi nó thường sẽ ngắt kết nối trong <30 phút.
Dan Dascalescu

2

Điều này có thể là do khi bạn kết nối từ nhà, bạn sẽ vượt qua tường lửa đóng phiên TCP sau một khoảng thời gian nhỏ. Nhưng TcpKeepAlive nên tránh điều này. Bạn đã kích hoạt TcpKeepAlive ở phía máy khách hay phía máy chủ chưa?


Tôi đã thực hiện TcpKeepAlive ở phía máy khách (trong ~ / .ssh / config) - Tôi nghĩ rằng điều này sẽ giải quyết các vấn đề tường lửa cục bộ, nhưng nó vẫn hết thời gian.
gareth_bowles

Theo mặc định, nó "bật" ở phía máy chủ, nhưng kiểm tra sshd_config để xem nó có bị vô hiệu hóa không.
bán kính

Một số tường lửa ngắt kết nối TCP sau một khoảng thời gian nhất định NGAY nếu chúng không hoạt động.
TomOnTime

Một số tường lửa ngắt kết nối TCP sau một khoảng thời gian nhất định NGAY nếu chúng không hoạt động. Cách để phát hiện điều này là để xem bạn có bị ngắt kết nối liên tục không.
TomOnTime

Dưới đây là các cài đặt tôi đã sử dụng để sửa: TCPKeepAlive no, ClientAliveInterval 300, ClientAliveCountMax 3
Matt Simmons

2

Tôi nhận được điều này mọi lúc trên kết nối Comcast của tôi. Vấn đề là khoảng thời gian duy trì của máy khách SSH của bạn quá dài cho thời gian chờ được định cấu hình trong đường dẫn mạng của bạn. Nếu bạn đang dùng Linux, bạn có thể sửa đổi giá trị ServerAliveIntervalServerAliveCountergiá trị thấp hơn giá trị mặc định của chúng. Giá trị này được đặt trong vài giây. Tập tin cấu hình toàn hệ thống được tìm thấy (nói chung) trong /etc/ssh/ssh_config. Đặt hai AND đó TcpKeepAlivesẽ giúp duy trì kết nối của bạn.


1

Giống như bán kính nói, một số tường lửa toàn trạng thái 'quên' kết nối sau một thời gian nhất định (thường có thể định cấu hình) và sẽ không cho phép liên lạc thêm cho kết nối; họ hy vọng kết nối sẽ bắt đầu với TCP SYN (tôi đề cập đến giao tiếp SSH của bạn ở đây).

Có một khả năng khác. Đường dẫn mạng giữa nhà và văn phòng của bạn có thể bị mất (thuộc loại gói). Khi bạn cố gắng gõ trên máy khách SSH, nếu liên kết của bạn bị đình trệ một thời gian, máy khách có thể bỏ cuộc và thất bại.

Cấu hình Keepalive trên máy khách sẽ xử lý trường hợp đầu tiên ở đây nhưng không thể giúp trong trường hợp thứ hai. Tường lửa thường ở chu vi văn phòng của bạn và do đó có thể được cấu hình. Điều đó cũng sẽ giúp về điểm đầu tiên.

Để kiểm tra xem bạn có bị mất liên kết không liên tục hay không, bạn có thể giữ 'ping' hoạt động ở chế độ nền từ máy khách của mình.


0

Bạn cũng có thể thêm các cài đặt được đề xuất bởi người khác làm mặc định trong ~/.ssh/configtệp của mình , vì vậy bạn không phải chuyển chúng cho sshmỗi khi bạn bắt đầu kết nối:

nano ~/.ssh/config và thêm:

TCPKeepAlive=no
ServerAliveInterval=15
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.