SSH ngừng hoạt động sau khi cập nhật máy chủ? Chuyện gì đã xảy ra?


9

Tôi đã sử dụng các kết nối SSH dựa trên PKI trong hơn 10 năm. Đột nhiên, sau khi cập nhật máy chủ - một số kết nối ngừng hoạt động. Tôi đang sử dụng cùng các khóa PKI mà tôi đã sử dụng trong nhiều năm (mỗi máy chủ có khóa riêng, tôi có một bộ khóa cá nhân nhỏ).

Làm việc - trông như thế này:

C:\Users\michael>ssh2 -p 2222 root@192.168.129.64 date
Authentication successful.
Fri Nov 25 10:30:42  2016

Không hoạt động trông như:

C:\Users\michael>ssh2 root@192.168.129.64 date
warning: Authentication failed.
Disconnected; key exchange or algorithm negotiation failed (Algorithm negotiation failed.).

Những gì đã thay đổi?


2
Bất cứ khi nào tôi nâng cấp hoặc cấu hình lại SSH, tôi thường ngay lập tức cố gắng mở một kết nối SSH khác trong khi để kết nối hiện tại mở để gỡ lỗi. Cách tiếp cận đó sẽ giúp gỡ lỗi trong các tình huống như của bạn. Bạn vẫn có quyền truy cập vào máy chủ? Hoặc bạn đang cố gắng gỡ lỗi này từ phía máy khách mà không có quyền truy cập để xem nhật ký phía máy chủ cho đến khi bạn giải quyết được vấn đề?
kasperd

1
Tôi đã luôn luôn có quyền truy cập vào máy chủ, may mắn thay. Nói chung, khi áp dụng các bản cập nhật, tôi cố gắng trở thành 'trên bảng điều khiển' - vì những lý do như bạn đề cập. Những gì tôi đã cố gắng chỉ ra ở đây là cách gỡ lỗi khi nó hoạt động đối với một số (ví dụ, putty gần đây), nhưng không phải là những thứ khác (ví dụ, ssh-client 14 tuổi không biết các thuật toán mã hóa, kex và mac được cải tiến.
Michael Feel

Câu trả lời:


14

Sau khi cập nhật - tác dụng phụ có thể phát huy tác dụng. Với OpenSSH - mặc định thay đổi thường xuyên. OpenBSD (người duy trì / phát triển OpenSSH) có chính sách OpenBSD để không lo ngại về khả năng tương thích ngược. Điều này có thể 'phá vỡ' những thứ đang đọc, đang hoạt động tốt.

Có một gợi ý lớn - mà tôi đã không nhận thấy khi điều này xảy ra lần đầu tiên với tôi (sử dụng giao diện GUI và tôi chỉ cần nhấp vào nó và 'tức giận' với 'cập nhật ngu ngốc - phiên bản mới bị hỏng'. đã không bị hỏng - nhưng OpenBSD / OpenSSH bắt đầu thay đổi mặc định trao đổi khóa bắt đầu bằng OpenSSH-6.7p1, xem: http://www.openssh.com/txt/release-6.7 , đáng chú ý:

Thay đổi kể từ OpenSSH 6.6

Những thay đổi không tương thích

  • sshd (8): Bộ mật mã và MAC mặc định đã được thay đổi để
    loại bỏ các thuật toán không an toàn. Cụ thể, mật mã CBC và arcfour *
    bị tắt theo mặc định.

    Toàn bộ thuật toán vẫn khả dụng nếu được định cấu hình
    rõ ràng thông qua các tùy chọn sshd_config của Ciphers và MAC.

Vấn đề của tôi là tôi có một khách hàng cũ không có bất kỳ mặc định mới nào, vì vậy nó không thể kết nối.

Hai đường dẫn giải pháp: sửa / vá máy chủ hoặc - sửa / vá máy khách.

Giải pháp máy chủ: mang lại các cài đặt "cũ" để khách hàng "cũ" có thể tiếp tục kết nối, thân thiện với các máy khách hiện tại - chỉnh sửa tệp sshd_config và thêm lại (đủ) các mật mã cũ.

Các dòng chính để thay đổi / thêm vào sshd_config là:

ciphers aes128-ctr,aes192-ctr,aes256-ctr,chacha20-poly1305@openssh.com,aes256-cbc
KexAlgorithms  curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
macs hmac-sha2-256,hmac-sha2-512,hmac-sha1-96,hmac-sha1

Chỉ cần thêm:

# Ciphers
# The dafaults starting with OpenSSH 6.7 are:
# aes128-ctr,aes192-ctr,aes256-ctr,chacha20-poly1305@openssh.com
# older clients may need an older cipher, e.g.
# ciphers aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,arcfour
# only adding aes256-cbc as an "old" cipher

ciphers aes128-ctr,aes192-ctr,aes256-ctr,chacha20-poly1305@openssh.com,aes256-cbc

# KEX Key Exchange algorithms
# default from openssh 6.7 are:
# curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256,\
#  diffie-hellman-group14-sha1
# an older kex are: none,KexAlgorithms diffie-hellman-group1-sha1

# only adding diffie-hellman-group-sha1  as an "old" KEX
# and this should be deleted ASAP as it is clearly "one of the problems" with SSL based encryption
KexAlgorithms  curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1

# MAC message authentification code
# the new defaults are:
# umac-64-etm@openssh.com,umac-128-etm@openssh.com,
# hmac-sha2-256-etm@openssh.com,hmac-sha2-512-
# etm@openssh.com,
# umac-64@openssh.com,umac-128@openssh.com,
# hmac-sha2-256,hmac-sha2-512

# older defaults (still supported) are:
# macs hmac-sha1,hmac-md5

# consider removing hmac-sha1-96,hmac-sha1,hmac-md5 "Soon!"
macs hmac-sha2-256,hmac-sha2-512,hmac-sha1-96,hmac-sha1

Giải pháp số 2 - sửa chữa / thay thế máy khách

Một cách dễ dàng để xem mật mã mà khách hàng hiện tại của bạn hỗ trợ (giả sử CLI) là gì ssh -hvà xem liệu điều đó có cung cấp một cái gì đó như:

Supported ciphers:
  3des-cbc,aes256-cbc,aes192-cbc,aes128-cbc,blowfish-cbc,twofish-cbc,twofish256-cbc,twofish192-cbc,twofish128-cbc,des-cbc@ssh.com,cast128-cbc,rc2-cbc@ssh.com,arcfour,none
Supported MAC algorithms:
  hmac-md5,hmac-md5-96,hmac-sha1,hmac-sha1-96,hmac-sha256@ssh.com,hmac-sha256-96@ssh.com,hmac-ripemd160@ssh.com,hmac-ripemd160-96@ssh.com,hmac-tiger128@ssh.com,hmac-tiger128-96@ssh.com,hmac-tiger160@ssh.com,hmac-tiger160-96@ssh.com,hmac-tiger192@ssh.com,hmac-tiger192-96@ssh.com,none

Một lệnh hữu ích khác là: ssh -V

ssh2: SSH Secure Shell 3.2.9 Windows Client
Product: SSH Secure Shell for Workstations
License type: none (non-commercial)

Của tôi - là - một khách hàng rất cũ - cho máy tính để bàn của tôi. Nhìn ở trên, bạn có thể thấy nó không hỗ trợ bất kỳ - 15 năm sau - các thuật toán ưa thích, thậm chí không phải là một -cbr (xoay), chỉ -cbc (sao chép khối).

Nếu khách hàng của bạn không có tùy chọn để cung cấp các khóa, v.v. được hỗ trợ (OpenSSH nên có tùy chọn -Q), hãy bắt đầu kết nối với chính bạn, ví dụ, ssh -v localhostvà có những dòng như thế này để cho bạn biết wat:

debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug2: kex_parse_kexinit: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-grousha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-rsa,ssh-dss
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysatiu.se
...

Và những gì đã được tìm thấy (và được sử dụng):

debug2: mac_setup: found hmac-sha1
debug1: kex: server->client aes128-ctr hmac-sha1 none
debug2: mac_setup: found hmac-sha1
debug1: kex: client->server aes128-ctr hmac-sha1 none

Thêm: thông tin gỡ lỗi từ kết nối không thành công - thêm chi tiết

Hoặc, những gì đã cố gắng, nhưng bỏ lỡ.

debug: OpenSSH: Major: 7 Minor: 3 Revision: 0
debug: Ssh2Transport: All versions of OpenSSH handle kex guesses incorrectly.
debug: Ssh2Transport: Algorithm negotiation failed for c_to_s_cipher: client list: aes128-cbc,3des-cbc,twofish128-cbc,cast128-cbc,twofish-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,twofish192-cbc,twofish256-cbc,arcfour vs. server list : chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug: Ssh2Transport: Algorithm negotiation failed for s_to_c_cipher: client list: aes128-cbc,3des-cbc,twofish128-cbc,cast128-cbc,twofish-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,twofish192-cbc,twofish256-cbc,arcfour vs. server list : chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug: Ssh2Transport: lang s to c: `', lang c to s: `'
debug: Ssh2Transport: Couldn't agree on kex or hostkey alg. (chosen_kex = NULL, chosen_host_key = ssh-rsa)
debug: Ssh2Common: DISCONNECT received: Algorithm negotiation failed.

Chỉnh sửa: đã thêm 02 tháng 1 năm 2017

Phần mới - những gì về các phím ngừng hoạt động?

Trên máy chủ của tôi, tôi có một máy khách 'cũ' và máy khách 'mới nhất' được cài đặt - và có các hành vi khác nhau kết nối với máy chủ. Ở đây, vấn đề không phải là mật mã khớp - mà là sử dụng cặp PKI cổ xưa - dựa trên DSA.

Nói tóm lại, openssh-7 (.3) không còn gửi (theo mặc định, có thể không hoàn toàn) các khóa công khai DSA.

Dưới đây tôi so sánh đầu ra của hai phiên bản openssh
/ usr / bin / ssh (phiên bản cũ, bên trái) và
/ opt / bin / ssh (phiên bản mới, bên phải) - lệnh là:

${version}/ssh -v user@host date

Khi bạn quét qua đầu ra bên dưới, tôi hy vọng bạn nhận thấy các bước và thông báo thường giống nhau. Sự khác biệt chính xuất hiện sau chuỗi SSH2_MSG_SERVICE_ACCEPT

Điều tôi muốn bạn chú ý là phiên bản cũ cung cấp (và được chấp nhận bởi máy chủ 'cũ' - cặp khóa dựa trên DSA trong khi máy chủ mới không bao giờ cung cấp khóa dựa trên DSA.

Lưu ý: 'giải pháp' cho việc này là thêm (ít nhất một trong số) các cặp PKI dựa trên rsa, ecdsa hoặc ed25519.

OpenSSH_6.0p1, OpenSSL 1.0.2h  3 May 2016                     | OpenSSH_7.3p1, OpenSSL 1.0.2h  3 May 2016
debug1: Reading configuration data /etc/ssh/ssh_config        | debug1: Reading configuration data /var/openssh/etc/ssh_confi
debug1: Failed dlopen: /usr/krb5/lib/libkrb5.a(libkrb5.a.so): <
        0509-026 System error: A file or directory in the pat <
                                                              <
debug1: Error loading Kerberos, disabling Kerberos auth.      <
debug1: Connecting to x061 [192.168.129.61] port 22.            debug1: Connecting to x061 [192.168.129.61] port 22.
debug1: Connection established.                                 debug1: Connection established.
debug1: identity file /home/michael/.ssh/id_rsa type 1          debug1: identity file /home/michael/.ssh/id_rsa type 1
                                                              > debug1: key_load_public: No such file or directory
debug1: identity file /home/michael/.ssh/id_rsa-cert type -1    debug1: identity file /home/michael/.ssh/id_rsa-cert type -1
debug1: identity file /home/michael/.ssh/id_dsa type 2          debug1: identity file /home/michael/.ssh/id_dsa type 2
                                                              > debug1: key_load_public: No such file or directory
debug1: identity file /home/michael/.ssh/id_dsa-cert type -1    debug1: identity file /home/michael/.ssh/id_dsa-cert type -1
debug1: identity file /home/michael/.ssh/id_ecdsa type 3        debug1: identity file /home/michael/.ssh/id_ecdsa type 3
                                                              > debug1: key_load_public: No such file or directory
debug1: identity file /home/michael/.ssh/id_ecdsa-cert type -   debug1: identity file /home/michael/.ssh/id_ecdsa-cert type -
debug1: Remote protocol version 2.0, remote software version  | debug1: key_load_public: No such file or directory
debug1: match: OpenSSH_6.0 pat OpenSSH*                       | debug1: identity file /home/michael/.ssh/id_ed25519 type -1
                                                              > debug1: key_load_public: No such file or directory
                                                              > debug1: identity file /home/michael/.ssh/id_ed25519-cert type
debug1: Enabling compatibility mode for protocol 2.0            debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.0              | debug1: Local version string SSH-2.0-OpenSSH_7.3
                                                              > debug1: Remote protocol version 2.0, remote software version
                                                              > debug1: match: OpenSSH_6.0 pat OpenSSH* compat 0x04000000
                                                              > debug1: Authenticating to x061:22 as 'padmin'
debug1: SSH2_MSG_KEXINIT sent                                   debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received                               debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none          | debug1: kex: algorithm: ecdh-sha2-nistp256
debug1: kex: client->server aes128-ctr hmac-md5 none          | debug1: kex: host key algorithm: ssh-rsa
                                                              > debug1: kex: server->client cipher: aes128-ctr MAC: umac-64@o
                                                              > debug1: kex: client->server cipher: aes128-ctr MAC: umac-64@o
debug1: sending SSH2_MSG_KEX_ECDH_INIT                          debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY                       debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: RSA 9f:0a:4d:a8:1b:ba:e6:d4:1a:b2:cd | debug1: Server host key: ssh-rsa SHA256:ORf5UVI7mRm/9MthM2qXM
debug1: Host 'x061' is known and matches the RSA host key.      debug1: Host 'x061' is known and matches the RSA host key.
debug1: Found key in /home/michael/.ssh/known_hosts:57          debug1: Found key in /home/michael/.ssh/known_hosts:57
debug1: ssh_rsa_verify: signature correct                     | debug1: rekey after 4294967296 blocks
debug1: SSH2_MSG_NEWKEYS sent                                   debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS                              debug1: expecting SSH2_MSG_NEWKEYS
                                                              > debug1: rekey after 4294967296 blocks
debug1: SSH2_MSG_NEWKEYS received                               debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server                         | debug1: Skipping ssh-dss key /home/michael/.ssh/id_dsa - not
debug1: SSH2_MSG_SERVICE_REQUEST sent                         <
debug1: SSH2_MSG_SERVICE_ACCEPT received                        debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password   debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey                   debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/michael/.ssh/id_rsa      debug1: Offering RSA public key: /home/michael/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password   debug1: Authentications that can continue: publickey,password
debug1: Offering DSA public key: /home/michael/.ssh/id_dsa    | debug1: Offering ECDSA public key: /home/michael/.ssh/id_ecds
debug1: Server accepts key: pkalg ssh-dss blen 433            | debug1: Authentications that can continue: publickey,password
debug1: read PEM private key done: type DSA                   | debug1: Trying private key: /home/michael/.ssh/id_ed25519
debug1: Authentication succeeded (publickey).                 | debug1: Next authentication method: keyboard-interactive
Authenticated to x061 ([192.168.129.61]:22).                  | debug1: Authentications that can continue: publickey,password
debug1: channel 0: new [client-session]                       | debug1: Next authentication method: password
debug1: Requesting no-more-sessions@openssh.com               | padmin@x061's password:
debug1: Entering interactive session.                         |

Tôi cũng có người dùng ở đây phàn nàn về các khóa có giao thức lỗi thời vào thời điểm tôi nâng cấp lên Debian 8.
Rui F Ribeiro

1
Tôi đã quên đề cập - rằng đối với các cửa sổ của mình, tôi đã chuyển sang putty (ssh.com chỉ bán cho các doanh nghiệp) - sẽ ở lại ssh2nếu họ chấp nhận tôi - chủ yếu để dễ dàng thực hiện scpchuyển khoản từ cùng một cửa sổ nhưssh
Michael Feel

1
Cập nhật ứng dụng khách của bạn thay vì sử dụng các máy khách cũ hàng năm và cho phép các thuật toán có thể bị hỏng.
Jakuje

1
Xem Nâng cấp khóa SSH của bạn! để biết thêm chi tiết, nhưng như @Jakuje nói, việc giữ các khóa cũ, máy khách cũ và thuật toán cũ là một ý tưởng tồi.
Stephen Kitt

tuổi của khóa không phải là một vấn đề, imho - mà là loại và kích cỡ. "DSA" đã hết, "RSA" ít nhất là 2048 bit. "Tốt hơn" là ecdsa. Như @Jakuje đề cập - và những gì Q & A này nói về - cập nhật khách hàng - nhưng cũng được cập nhật mặc định. Là một khách hàng, bạn có thể 'yêu cầu' một máy chủ sử dụng các thuật toán tốt hơn bằng cách không cung cấp các thuật toán yếu (bị hỏng nặng hơn).
Michael Feel
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.