서버 업데이트 후 SSH 작동이 중지 되었습니까? 어떻게 된 거예요?


9

PKI 기반 SSH 연결을 10 년 이상 사용해 왔습니다. 갑자기 서버 업데이트 후-일부 연결이 작동을 멈췄습니다. 몇 년 동안 사용했던 것과 동일한 PKI 키를 사용하고 있습니다 (각 서버에는 고유 한 키가 있고 작은 개인 키 세트가 있습니다).

작동-다음과 같습니다.

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

작동하지 않는 모습 :

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

무엇이 바뀌 었습니까?


2
SSH를 업그레이드하거나 재구성 할 때마다 일반적으로 즉시 다른 SSH 연결을 열려고 시도하면서 디버깅을 위해 현재 연결을 열어 둡니다. 이 방법은 당신과 같은 시나리오에서 디버깅에 도움이 될 것입니다. 여전히 서버에 액세스 할 수 있습니까? 또는 문제를 해결할 때까지 서버 측 로그를 볼 수있는 액세스 권한이없는 클라이언트 측에서이를 디버깅하려고합니까?
kasperd

1
다행히도 항상 서버에 액세스했습니다. 일반적으로 업데이트를 적용 할 때 언급 한 것처럼 '콘솔에서'하려고합니다. 여기서 보여 주려는 것은 일부 (예 : 최근 퍼티)에서는 작동하지만 다른 것 (예 : 개선 된 암호, kex 및 mac 알고리즘을 모르는 14 세 ssh-client)에서는 작동하는 경우 디버깅하는 방법입니다.
Michael Felt

답변:


14

업데이트 후-부작용이 발생할 수 있습니다. OpenSSH를 사용하면 기본값이 자주 변경됩니다. OpenSSH를 유지 / 개발하는 OpenBSD에는 이전 버전과의 호환성에 대해 걱정하지 않는 OpenBSD 정책이 있습니다. 이것은 잘 읽은 내용을 '파손'시킬 수 있습니다.

거대한 힌트가 있습니다-GUI 인터페이스를 처음 사용했을 때 눈치 채지 못했습니다 (GUI 인터페이스를 사용하여 방금 클릭 한 후 '어리석은 업데이트-새 버전이 손상되었습니다'라는 메시지가 나타납니다). 깨진되지 않았다 -하지만, 오픈 BSD / OpenSSH를 OpenSSH를-6.7p1 참조로 시작하는 키 교환 기본값 변경 시작 : http://www.openssh.com/txt/release-6.7 , noteably를 :

OpenSSH 6.6 이후의 변경 사항

잠재적으로 호환되지 않는 변경

  • sshd (8) :
    안전하지 않은 알고리즘 을 제거 하도록 기본 암호 및 MAC 세트가 변경되었습니다 . 특히 CBC 암호 및 arcfour *
    는 기본적으로 비활성화되어 있습니다.


    Ciphers 및 MACs sshd_config 옵션을 통해 명시 적으로 구성된 경우 전체 알고리즘 세트를 계속 사용할 수 있습니다.

내 문제는 새로운 기본값이없는 오래된 클라이언트가있어 연결할 수 없다는 것입니다.

두 가지 솔루션 경로 : 서버 수정 / 패치 또는 클라이언트 수정 / 패치

서버 솔루션 : "오래된"설정을 다시 가져 와서 "오래된"클라이언트가 기존 클라이언트와 친숙한 상태로 계속 연결할 수 있도록 sshd_config 파일을 편집하고 이전 암호를 다시 추가하십시오.

sshd_config에서 변경 / 추가 할 주요 라인은 다음과 같습니다.

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

다음을 추가하십시오.

# 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

해결 방법 # 2-클라이언트 수정 / 교체

현재 클라이언트가 지원하는 암호를 확인하는 쉬운 방법 (CLI 가정)은 ssh -h다음과 같은 것을 제공하는지 확인합니다.

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

또 다른 유용한 명령은 다음과 같습니다. ssh -V

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

내-내-아주 오래된 클라이언트였습니다. 위를 보면 15 년 후 선호하는 알고리즘 중 하나를 지원하지 않으며 심지어 하나의 -cbr (회전), -cbc (블록 복사) 만 지원한다는 것을 알 수 있습니다.

클라이언트에 키 등을 제공하는 옵션이없는 경우 (OpenSSH에는 옵션이 있어야 함 -Q) 자신과의 연결을 시작하십시오. 예를 들어 다음 ssh -v localhost과 같은 행이 있습니다.

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
...

그리고 발견되고 사용 된 것 :

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

추가 : 실패한 연결의 디버그 정보-자세한 내용

또는 시도했지만 놓친 것.

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.

편집 : 추가 2017 년 2 월 1 일

새로운 섹션-작동을 멈추는 키는 어떻습니까?

내 서버에는 '오래된'클라이언트와 '최신'클라이언트가 설치되어 있으며 서버에 연결하는 다른 동작을 얻습니다. 여기서 문제는 암호 불일치가 아니라 DSA 기반 의 구식 PKI 쌍 사용입니다 .

간단히 말해 openssh-7 (.3)은 더 이상 DSA 공개 키를 보내지 않습니다 (기본적으로는 아님).

아래에서는 openssh
/ usr / bin / ssh (이전 버전, 왼쪽) 및
/ opt / bin / ssh (새 버전, 오른쪽 ) 의 두 가지 버전의 출력을 비교합니다 . 명령은 다음과 같습니다.

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

아래 출력을 스캔 할 때 단계와 메시지가 일반적으로 동일하다는 것을 알기를 바랍니다. 주요 차이점은 SSH2_MSG_SERVICE_ACCEPT 문자열 뒤에옵니다.

이전 버전이 제공하고 이전 서버는 DSA 기반 키 쌍을 허용하지만 새 서버는 DSA 기반 키를 제공하지 않습니다.

참고 :이를위한 '솔루션'은 rsa, ecdsa 또는 ed25519 기반 PKI 쌍을 추가하는 것입니다.

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.                         |

또한 사용자가 여기에 데비안 8로 업그레이드 시간 I에 의해 사용되지 않는 프로토콜 키에 대해 불평했다
루이 F 리베

1
에 머물렀던 것 - 나의 창문 내가 (ssh.com는 기업에 판매) 퍼티로 전환하는 것이 - 나는 얘기를 깜빡 했네요 ssh2그들이 나를 인정했을 경우 - 주로 수행의 용이성 scp과 같은 창에서 전송ssh
마이클 펠트

1
수년간의 고대 클라이언트를 사용하고 알고리즘을 깨뜨릴 수있는 대신 클라이언트를 업데이트하십시오.
Jakuje

1
SSH 키 업그레이드를 참조하십시오 ! 자세한 내용은 @Jakuje가 말했듯이 이전 키, 이전 클라이언트 및 이전 알고리즘을 유지하는 것은 좋지 않습니다.
Stephen Kitt

열쇠의 나이는 문제가 아니라 형식과 크기입니다. "DSA"가 2048 비트 이상의 "RSA"입니다. '더 나은'은 ecdsa입니다. @Jakuje가 언급 했듯이이 Q & A는 클라이언트를 업데이트하지만 기본값을 업데이트하고 있습니다. 클라이언트는 약한 (나쁜 부서진) 알고리즘을 제공하지 않음으로써 더 나은 알고리즘을 사용하여 서버를 '요구'할 수 있습니다.
Michael Felt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.