저는 10년 넘게 PKI 기반 SSH 연결을 사용해 왔습니다. 갑자기 서버 업데이트 후 일부 연결이 작동을 멈췄습니다. 저는 수년 동안 사용해 온 것과 동일한 PKI 키를 사용하고 있습니다(각 서버에는 자체 키가 있고 작은 개인 키 세트가 있습니다).
작업 중 - 다음과 같습니다.
C:\Users\michael>ssh2 -p 2222 [email protected] date
Authentication successful.
Fri Nov 25 10:30:42 2016
작동하지 않는 모습은 다음과 같습니다.
C:\Users\michael>ssh2 [email protected] date
warning: Authentication failed.
Disconnected; key exchange or algorithm negotiation failed (Algorithm negotiation failed.).
무엇이 바뀌었나요?
답변1
업데이트 후 - 부작용이 발생할 수 있습니다. OpenSSH 사용 - 기본값이 자주 변경됩니다. OpenSSH를 유지/개발하는 OpenBSD에는 이전 버전과의 호환성을 고려하지 않는다는 OpenBSD 정책이 있습니다. 이는 잘 작동하는 것을 "중단"할 수 있습니다.
한 가지 중요한 팁 - 처음에는 이런 일이 발생했다는 사실을 눈치채지 못했습니다(GUI 인터페이스를 사용하여 방금 클릭했는데 "멍청한 업데이트 - 새 버전이 깨졌습니다"에 대해 "화가 났습니다". 알고 보니 새 버전이었습니다. 깨지지 않았지만 OpenBSD/OpenSSH는 OpenSSH-6.7p1부터 키 교환 기본값을 변경하기 시작했습니다. 다음을 참조하세요.http://www.openssh.com/txt/release-6.7, 주목할 가치가 있습니다.
OpenSSH 6.6 이후 변경 사항
잠재적으로 호환되지 않는 변경사항
sshd(8):
안전하지 않은 알고리즘을 제거하기 위해 기본 암호 및 MAC 세트가 변경되었습니다. 특히 CBC 암호와 arcfour*는
기본적으로 비활성화되어 있습니다.
Ciphers 및 MAC sshd_config 옵션을 통해 명시적으로 구성된 경우 전체 알고리즘 세트를 계속 사용할 수 있습니다.
제 문제는 새로운 기본 설정이 전혀 없어 연결할 수 없는 오래된 클라이언트가 있다는 것입니다.
두 가지 솔루션 경로: 서버 복구/패치 또는 클라이언트 복구/패치.
서버 솔루션: "이전" 클라이언트가 계속 연결할 수 있도록 "이전" 설정을 복원합니다. 즉, 기존 클라이언트에 친숙합니다. sshd_config 파일을 편집하고 (충분한) 이전 비밀번호를 다시 추가합니다.
sshd_config에서 변경/추가할 주요 라인은 다음과 같습니다:
ciphers aes128-ctr,aes192-ctr,aes256-ctr,[email protected],aes256-cbc
KexAlgorithms [email protected],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,[email protected]
# 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,[email protected],aes256-cbc
# KEX Key Exchange algorithms
# default from openssh 6.7 are:
# [email protected],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 [email protected],diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
# MAC message authentification code
# the new defaults are:
# [email protected],[email protected],
# [email protected],hmac-sha2-512-
# [email protected],
# [email protected],[email protected],
# 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,[email protected],cast128-cbc,[email protected],arcfour,none
Supported MAC algorithms:
hmac-md5,hmac-md5-96,hmac-sha1,hmac-sha1-96,[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],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에는 options 가 있어야 함 -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: [email protected],[email protected],[email protected],[email protected]@openssh.com,[email protected],[email protected],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,[email protected]
...
그리고 무엇을 발견하고 사용할 것인가:
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 : [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
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 : [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
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년 1월 2일에 추가됨
새로운 섹션 - 작동하지 않는 키는 어떻게 해야 하나요?
내 서버에는 "이전" 클라이언트와 "최신" 클라이언트가 설치되어 있습니다. 서버에 연결할 때 동작이 다릅니다. 여기서 문제는 비밀번호가 일치하지 않는다는 것이 아닙니다.고대의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 [email protected] | padmin@x061's password:
debug1: Entering interactive session. |