SSH bir sunucu güncellemesinden sonra çalışmayı durdurdu mu? Ne oldu?


9

10 yılı aşkın bir süredir PKI tabanlı SSH bağlantıları kullanıyorum. Aniden, bir sunucu güncellemesinden sonra - bazı bağlantılar çalışmayı durdurdu. Yıllardır kullandığım aynı PKI anahtarlarını kullanıyorum (her sunucunun kendi anahtarları var, küçük bir kişisel anahtar setim var).

Çalışıyor - şöyle görünüyor:

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

Çalışmıyor gibi görünüyor:

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

Ne değişti?


2
SSH'yi her yükselttiğimde veya yeniden yapılandırdığımda, geçerli bağlantı hata ayıklaması için açık bırakılırken genellikle hemen başka bir SSH bağlantısı açmaya çalışırım. Bu yaklaşım sizinki gibi senaryolarda hata ayıklamaya yardımcı olur. Sunucuya hala erişiminiz var mı? Yoksa sorunu çözene kadar sunucu tarafı günlüklerine bakmak için erişimi olmayan istemci tarafında hata ayıklamaya mı çalışıyorsunuz?
kasperd

1
Neyse ki sunucuya her zaman erişebildim. Genel olarak, güncellemeleri uygularken bahsettiğiniz nedenlerden dolayı 'konsolda' olmaya çalışıyorum. Burada göstermeye çalıştığım şey, bazılarında (örneğin, son macun) çalıştığında, ancak diğerlerinde (örneğin, iyileştirilmiş şifreleri, kex ve mac algoritmalarını bilmeyen 14 yaşındaki ssh istemcisi) çalıştığında hata ayıklamanın nasıl yapılacağıdır.
Michael Felt

Yanıtlar:


14

Bir güncellemeden sonra - yan etkiler ortaya çıkabilir. OpenSSH ile - varsayılanlar sık ​​sık değişir. OpenBSD'yi (OpenSSH'yi sürdüren / geliştiren) OpenBSD'nin geriye dönük uyumluluk konusunda endişe duymama politikası vardır. Bu, iyi okunan, okunan şeyleri 'kırabilir'.

Büyük bir ipucu var - bu bana ilk geldiğinde fark etmedim (GUI arayüzünü kullanarak ve sadece tıkladım ve 'aptal güncelleme - yeni sürüm bozuk' ile 'kızgındı'). kırılmadı - ancak OpenSSH-6.7p1 ile başlayan anahtar değişimi varsayılanlarını değiştirmeye başlayan OpenBSD / OpenSSH bkz: http://www.openssh.com/txt/release-6.7 , dikkat çekici bir şekilde:

OpenSSH 6.6'dan bu yana yapılan değişiklikler

Potansiyel olarak uyumsuz değişiklikler

  • sshd (8):
    Güvenli olmayan algoritmaları kaldırmak için varsayılan şifre ve MAC grubu değiştirildi . Özellikle, CBC şifreleri ve arcfour *
    varsayılan olarak devre dışıdır.


    Şifreler ve MAC'lar sshd_config seçenekleri aracılığıyla açıkça yapılandırılırsa, algoritmaların tamamı kullanılabilir kalır .

Benim sorunum, yeni varsayılanların hiçbiri olmayan eski bir istemcim var, bu yüzden bağlanamıyor.

İki çözüm yolu: sunucuyu düzeltin / düzeltin veya - düzeltin.

Sunucu çözümü: "eski" ayarları geri getirin, böylece "eski" istemciler bağlanmaya devam edebilir, bu da - mevcut istemciler için dosttur - sshd_config dosyasını düzenleyin ve eski şifreleri geri ekleyin (yeterli).

Değiştirmek / eklemek için anahtar satırları 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

Sadece ekle:

# 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

Çözüm # 2 - İstemciyi düzeltin / değiştirin

Mevcut istemcinizin hangi şifreleri desteklediğini (CLI varsayarak) ssh -hgörmenin ve bunun gibi bir şey sağlayıp sağlamadığını görmenin kolay bir yolu :

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

Başka bir yararlı komut: ssh -V

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

Benimki - masaüstü bilgisayarım için çok eski bir müşteriydi. Yukarıda baktığınız zaman - 15 yıl sonra - tercih edilen algoritmaların hiçbirini desteklemediğini, hatta bir -cbr (dönen), sadece -cbc (blok-kopya) desteklemediğini görebilirsiniz.

İstemcinizin desteklenen anahtarları sağlama seçeneği yoksa (OpenSSH seçeneği olmalıdır -Q) sadece kendinize bir bağlantı başlatın, örneğin, ssh -v localhostwat'un bilindiğini söylemek için böyle çizgiler var:

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

Ve ne bulundu (ve kullanıldı):

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

Ekstra: başarısız bir bağlantıdan hata ayıklama bilgileri - daha fazla ayrıntı

Ya da denenen, ama kaçırılan şey.

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.

Düzenleme: 02 Ocak 2017 eklendi

Yeni Bölüm - ya çalışmayı durduran tuşlar?

Sunucumda 'eski' bir istemcim ve 'en son' istemcim yüklü - ve bir sunucuya bağlanmak için farklı davranışlar alıyorum. Burada mesele DSA'ya dayalı şifre yanlış eşleşmeleri değil, arkaik bir PKI çiftinin kullanılmasıdır.

Kısacası, openssh-7 (.3) artık DSA ortak anahtarları göndermiyor (varsayılan olarak, belki de hayır).

Aşağıda openssh
/ usr / bin / ssh (eski sürüm, sol taraf) ve
/ opt / bin / ssh (yeni sürüm, sağ taraf) iki sürümünün çıktılarını karşılaştırıyorum - komut:

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

Aşağıdaki çıktıyı tararken, adımların ve mesajların genellikle aynı olduğunu fark ettiniz. Temel fark SSH2_MSG_SERVICE_ACCEPT dizesinden sonra gelir

Ne fark etmenizi istiyorum eski sürümü sunuyor (ve 'eski' sunucu tarafından kabul edilir - DSA tabanlı anahtar çifti ise yeni sunucu asla DSA tabanlı anahtar sunuyor.

Not: Bunun için 'çözüm', rsa, ecdsa veya ed25519 tabanlı PKI çiftlerini (en az bir tanesini) eklemektir.

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

Ayrıca burada kullanıcıları Debian 8'e yükselttiğimde eski protokollerle anahtarlardan şikayet ettim.
Rui F Ribeiro

1
Bahsetmeyi unuttum - benim pencereler için macun geçti (ssh.com sadece işletmelere satıyor) - ssh2beni kabul ederlerse kalacaktı - esas scpolarak aynı pencereden transfer yapmanın kolaylığı içinssh
Michael Felt

1
Yıllarca eski istemcileri kullanmak ve muhtemelen bozuk algoritmaları etkinleştirmek yerine müşterinizi güncelleyin.
Jakuje

1
Bkz . SSH anahtarlarınızı yükseltme! daha fazla ayrıntı için, ancak @Jakuje'nin dediği gibi, eski anahtarları, eski istemcileri ve eski algoritmaları tutmak kötü bir fikirdir.
Stephen Kitt

anahtarın yaşı bir sorun değil, imho - ama türü ve boyutu. "DSA" çıktı, "RSA" en az 2048 bit. 'Daha iyisi' ecdsa. @Jakuje'nin belirttiği gibi - ve bu soru-cevap ne hakkında - istemcileri güncelle - ancak varsayılanları da güncelliyor. İstemci olarak, bir sunucu zayıf (daha kötü kırık) olanları sunmadan daha iyi algoritmalar kullanır.
Michael Felt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.