Після одного оновлення один з клієнтів перестав підключатися по ssh до серверу. Враховуючи, що клієнт – це ПЗ закритого типу і з його сторони ми нічого не можемо вдіяти, прийшлося розбиратися зі сторони серверу. Включаємо debug в /etc/ssh/sshd_config:
SyslogFacility AUTH LogLevel DEBUG
і бачимо в логах таке:
list_hostkey_types: rsa-sha2-512,rsa-sha2-256 [preauth] kex: host key algorithm: (no match) [preauth] Unable to negotiate with XX.XX.XX.XX port 18331: no matching host key type found. Their offer: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521 [preauth] ... userauth_pubkey: signature algorithm ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
Як бачимо, немає збігу між тим, що пропонує сервер (перший рядок) і тим, що є у клієнта (останній рядок). Виправимо цю ситуацію, додавши в /etc/ssh/sshd_config таке:
HostKey /etc/ssh/ssh_host_ecdsa_key HostKeyAlgorithms +ecdsa-sha2-nistp256 PubkeyAcceptedKeyTypes=+ssh-rsa,ecdsa-sha2-nistp256
Після рестарту ssh можна побачити в логах успішне підключення:
list_hostkey_types: rsa-sha2-512,rsa-sha2-256,ecdsa-sha2-nistp256 [preauth] kex: algorithm: ecdh-sha2-nistp256 [preauth] kex: host key algorithm: ecdsa-sha2-nistp256 [preauth]