Kết nối ssh mất mãi mãi để bắt đầu, bị mắc kẹt tại cam kết: mạng


44

Kết nối với một trong các máy chủ của tôi bằng ssh mất hơn 20 giây để bắt đầu.

Điều này không liên quan đến các điều kiện LAN hoặc WAN, vì kết nối với chính nó mất cùng một (ssh localhost). Sau khi kết nối cuối cùng được thiết lập, nó rất nhanh để can thiệp vào máy chủ.

Sử dụng -vvv cho thấy kết nối bị kẹt sau khi nói "cam kết: mạng". Tại thời điểm này, xác thực (ở đây sử dụng khóa) đã được thực hiện, như hiển thị ở đây:

...
debug1: Authentication succeeded (publickey).
Authenticated to myserver.mydomain.com ([xx.xx.xx.xx]:22).
debug1: channel 0: new [client-session]
debug2: channel 0: send open
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network

(... bị kẹt ở đây trong 15 đến 25 giây ...)

debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug2: callback start
debug2: fd 3 setting TCP_NODELAY
debug2: client_session2_setup: id 0
...

Máy chủ là Ubuntu 16.04. Nó đã xảy ra với tôi trong quá khứ với một máy chủ khác (là Ubuntu 12.04), máy chủ đã tìm thấy giải pháp và vấn đề đã biến mất sau một thời gian ...

sshd_config là mặc định được cung cấp bởi Ubuntu.

Cho đến nay tôi đã thử:

  • sử dụng -o GSSAPIAuthentication = no trong lệnh ssh
  • sử dụng mật khẩu thay vì chìa khóa
  • sử dụng UsePriv đặc biệt không phải trả tiền thay vì có, trong sshd_config

1
Thông thường đối với tôi các kết nối SSH chậm là sự cố DNS, có thể đó là trường hợp ở đây? Ví dụ: máy chủ có thể bị kẹt khi cố gắng tạo DNS ngược cho IP của máy khách và chờ đợi thời gian chờ
Eric Renouf

Trên thực tế không: theo mặc định UseDNS không được xác định trong sshd_config và trang man nói rằng tùy chọn này là "không" theo mặc định.
M-Jack

3
Một số Googling cho thấy điều này có thể được gây ra bằng cách cập nhật systemd mà không cần khởi động lại. Và đã có một bản cập nhật systemd cho xenial vào ngày 12 tháng 7 . systemctl restart systemd-logindkhắc phục sự cố chỉ trong một khoảng thời gian ngắn đối với tôi.
Ivan Kozik

Hoặc nếu bạn thấy pam_systemd(sshd:session): Failed to create session: Connection timed outnhư được đề cập trong câu trả lời, đây có thể là github.com/systemd/systemd/issues/2925
Ivan Kozik

Tôi đến đây đã gặp sự cố này sau khi cập nhật và đề xuất của @ IvanKozik đã khắc phục sự cố - tức là systemctl khởi động lại systemd-logind - vì vậy cảm ơn vì điều đó.
Paul M

Câu trả lời:


43

Đây có lẽ là một vấn đề với D-Bussystemd. Nếu dbusdịch vụ được khởi động lại vì một số lý do, bạn cũng sẽ cần phải khởi động lại systemd-logind.

Bạn có thể kiểm tra xem đây có phải là sự cố hay không bằng cách mở nhật ký ssh daemon (trên Ubuntu /var/log/auth.log) và kiểm tra xem nó có các dòng này không:

sshd[2721]: pam_systemd(sshd:session): Failed to create session: Connection timed out

Nếu có, chỉ cần khởi động lại systemd-loginddịch vụ:

systemctl restart systemd-logind

Tôi gặp vấn đề tương tự trên CentOS 7, vì messagebusđã được khởi động lại (đó là cách D-Busdịch vụ được gọi trên CentOS).


Tôi đã cố gắng khởi động lại systemd-logind nhưng sau một thời gian nó nói daemon PolicyKit bị ngắt kết nối với xe buýt. Chúng tôi không còn là một đại lý xác thực đã đăng ký. Công việc cho systemd-logind.service không thành công vì quá thời gian chờ. Xem "systemctl status systemd-logind.service" và "Journalctl -xe" để biết chi tiết.
Kun Ren

@KunRen có lẽ bạn cần phải khởi động lại polkitdịch vụ bằng cách sử dụng systemctl restart polkit.
Strahinja Kustudic

16

tìm thấy câu trả lời:

đã thay đổi UsePAM từ có thành không trong tệp sshd_config

Sau khi khởi động lại dịch vụ ssh, kết nối ngay lập tức đến máy chủ. Trên máy chủ này, PAM được liên kết với ldap, vì vậy đó có thể là lý do, ngay cả khi ở đây tôi đang kết nối với người dùng được khai báo trên chính máy chủ, không phải là LDAP.

Chà, đây là một cách để vượt qua vấn đề, không thực sự là một giải pháp ... Tôi có các máy chủ khác được thiết lập giống như cách không gặp phải vấn đề này.

Hy vọng điều này có thể giúp ai đó ...


1
thay đổi UsePAM thành không có tác dụng khác. Xem cuộc thảo luận này Vì vậy, tôi đã phải đặt mật khẩu cho người dùng, vì tôi gặp lỗi như Người dùng không được phép vì tài khoản bị khóa
M-Jack

4
Đây thực sự không phải là một ý tưởng tốt.
Jakuje

1
tại sao ?? bất kỳ thay thế?
M-Jack

8
PAM được sử dụng cho những thứ khác xung quanh việc quản lý tài khoản trong các hệ thống hiện đại. Thay vì tắt nó đi, bạn nên tìm hiểu những gì đang diễn ra trong ngăn xếp PAM và tại sao nó lại mất nhiều thời gian như vậy.
Jakuje

Để mô-đun PAM không được sử dụng rất phổ biến được kích hoạt để truy cập SSH là một lỗ hổng bảo mật. Hạn chế quyền truy cập vào các dịch vụ quan trọng như SSH từ quan điểm bảo mật luôn là một ý tưởng hay cho BẤT K service dịch vụ nào khác. Khi bạn muốn mô-đun PAM hợp tác với SSH? Ví dụ: khi bạn cần tích hợp nó với thư mục hoạt động thông qua winbind, khi bạn cần hai yếu tố auth với mã thông báo google, v.v. Trong các trường hợp khác (khi sử dụng passwd và bóng), tắt nó là hoàn toàn an toàn. Mọi người dùng PAM sẽ thấy điều này: cve.mitre.org/cgi-bin/cvekey.cgi?keyword=pam
Michal Sokolowski

10

Điều này đã xảy ra trên hai trong số các máy chủ Fedora 25 của tôi và do nhiều lần thử đăng nhập SSH không thành công.

(Các đề xuất chung về sử dụng GSSAPIAuthentication=noUseDNS=no, hoặc khởi động lại systemd-logind, không có sự khác biệt.)

Trên các máy chủ này, /etc/pam.d/postloginchứa:

session     optional      pam_lastlog.so silent noupdate showfailed

Trang hướng dẫn pam_lastloggiải thích rằng showfailedtùy chọn sẽ:

Hiển thị số lần thử đăng nhập thất bại và ngày của lần thử thất bại cuối cùng từ btmp.

Trên các máy chủ này, các /var/log/btmptệp rất lớn do nhiều lần đăng nhập thất bại. Các btmptệp nhật ký không được xoay.

Tôi đã cài đặt logrotategói để đảm bảo các tệp nhật ký sẽ được xoay trong tương lai. (Trên Fedora, cấu hình có logrotatekhả năng xoay vòng /var/log/btmp.)

Tôi cũng đã xóa các btmptệp nhật ký khổng lồ ; Ngay sau khi tôi làm điều này, kết nối với các máy chủ là ngay lập tức trở lại.


Điều này đã giải quyết vấn đề của tôi! Cảm ơn bạn. Bắt đẹp. SSH mất 5-10 giây và bây giờ chỉ trong nháy mắt. Đây là một máy ảo mà tôi đã kết nối với Internet công cộng trong nhiều năm. Các quy tắc tường lửa của nó có lẽ có thể được điều chỉnh tốt hơn một chút, bây giờ tôi nghĩ về nó. Đối với những người khác, đây là tất cả những gì tôi đã làm: sudo truncate -s 0 /var/log/btmp- Của tôi có kích thước 2,7G.
Carl Bennett

2

Trong trường hợp của tôi, lý do là một rsyslogd bị rơi. Tôi phát hiện ra điều này bởi vì không có nhiều thông điệp tường trình trong eg / var / log / syslog hoặc /var/log/mail.log

Vì vậy, service rsyslog restartgiải quyết vấn đề cho chúng tôi.


Nguyên nhân tương tự trên máy chủ của chúng tôi đang chạy CentOS 6.10. Khởi động lại rsyslog đã chăm sóc nó. Vấn đề là, nó chưa chết. Nó đang chạy, nhưng dường như không làm gì hữu ích.
UtahJarhead

1

Đối với tôi vấn đề này là do btmptệp lớn (hàng trăm MB) . Tập tin này ghi lại những nỗ lực đăng nhập. Khi mọi người đang cố gắng ép buộc mật khẩu của bạn, tập tin này có thể lớn và gây ra sự chậm trễ trong "pledge: network"giai đoạn.

Cố gắng xóa tệp nhật ký

echo "" > /var/log/btmp

và xem nếu nó giúp.


3
Điều này cần nhiều lời giải thích hơn. Đối với người mới bắt đầu, tại sao bạn nghĩ rằng điều này là hữu ích?
Sven

Mẹo: Chỉ cần gõ :> /var/log/btmplàm btw tương tự.
Marius

1

Đối với tôi, giải pháp đã được thêm vào

UseDNS no

đến /etc/ssh/sshd_configvà sau đó dĩ nhiên service ssh restart(trên máy chủ Debian / Jessie của chúng tôi). Không có gì khác ...

trước :

ssh git@git.*****.de true  0.03s user 0.01s system 0% cpu 13.440 total
ssh git@git.*****.de true  0.03s user 0.01s system 0% cpu 20.990 total
ssh git@git.*****.de true  0.03s user 0.02s system 0% cpu 31.114 total
ssh git@git.*****.de true  0.03s user 0.01s system 0% cpu 25.898 total

sau :

ssh git@git.*****.de true  0.03s user 0.02s system 5% cpu 0.832 total
ssh git@git.*****.de true  0.03s user 0.01s system 7% cpu 0.523 total
ssh git@git.*****.de true  0.03s user 0.01s system 7% cpu 0.574 total

Không, thêm UseDNS nolà một giải pháp cho một vấn đề hoàn toàn khác.
kasperd

@kasperd Không thành vấn đề. Trong trường hợp của tôi, tôi đã có các triệu chứng rất giống nhau (một thời gian ngắn: bị mắc kẹt sau khi nói "cam kết: mạng") và đây là điều cuối cùng đã giúp ích, vì vậy đây là một giải pháp cho ít nhất một vấn đề rất giống nhau và tôi chắc chắn rằng nó sẽ giúp một hoặc khác tại một số điểm.
tamasgal

Tương tự ở đây, hai lần treo trong khi kết nối, một sau sign_and_send_pubkey, một sau dài hơn pledge: network. Chỉ thêm vào UseDNS nosau đó service ssh restartđã giải quyết vấn đề trên bản cài đặt Ubuntu 14.04.5 LTS cũ tại đây.
Chó săn

0

Tôi nhận thấy dòng sau trong phản hồi gỡ lỗi của tôi:

Control socket connect(/var/lib/jenkins/.ssh/USER@HOST:22): Permission denied

Đó là một tập tin được sở hữu root:roottrong khi tôi jenkins. Loại bỏ tập tin này giải quyết vấn đề của tôi.

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.