XX.XXX.XX.XX ile anlaşma yapılamıyor: eşleşen ana makine anahtarı türü bulunamadı. Teklifleri: ssh-dss


110

Web sunucumda bir git deposu oluşturmaya ve onu bilgisayarımda klonlamaya çalışıyorum. İşte yaptığım şey:

  1. Uzak sunucuda bir depo oluşturdum.
  2. Bir anahtar çifti üretilir: ssh-keygen -t dsa.
  3. Anahtarımı ssh-agent'a ekledim.
  4. İçindeki sunucu genel anahtarına kopyaladım ~/.ssh.

Ve sonra, komutu çalıştırmayı denedikten sonra git clone ssh://user@host/path-to-repositorybir hata alıyorum:

XX.XXX.XX.XX ile anlaşma yapılamıyor: eşleşen ana makine anahtarı türü bulunamadı. Teklifleri: ssh-dss
fatal: Uzak depodan okunamadı.
Lütfen doğru erişim haklarına sahip olduğunuzdan ve havuzun mevcut olduğundan emin olun.

Bu ne anlama geliyor?


Yanıtlar:


171

En son openssh sürümü, varsayılan olarak DSA anahtarlarını kullanımdan kaldırmıştır. GIT sağlayıcınıza makul bir ana bilgisayar anahtarı eklemesini önermelisiniz. Yalnızca DSA'ya güvenmek iyi bir fikir değildir.

Geçici bir çözüm olarak, eski kullanımassh ilişkin resmi belgelerde açıklandığı gibi , müşterinize DSA ana bilgisayar anahtarlarını kabul etmek istediğinizi söylemeniz gerekir . Birkaç seçeneğiniz var, ancak bu satırları ~/.ssh/configdosyanıza eklemenizi öneririm :

Host your-remote-host
    HostkeyAlgorithms +ssh-dss

Diğer bir olasılık, GIT_SSHbu seçenekleri belirlemek için ortam değişkenini kullanmaktır :

GIT_SSH_COMMAND="ssh -oHostKeyAlgorithms=+ssh-dss" git clone ssh://user@host/path-to-repository

1
Şimdi sadece ile ana bilgisayar adını belirtmeden çalıştı HostkeyAlgorithms +ssh-dss. Teşekkürler.
giovannipds

1
@giovannipds Bağlandığınız uzak ana bilgisayar olması kesinlikle gerekir. @ downvoters Olumsuz oyları açıklamak iyi olurdu.
Jakuje

@Jakuje üzgünüm adamım, yanlış tıkladım ve hemen değiştirmenin imkansızlığı nedeniyle cevabımı güncelleyemedim.
giovannipds

1
@Jakuje Sadece size bildirmek için oyumu zaten güncelledim. =)
giovannipds

.Ssh dizininizde böyle bir dosya yoksa, "config" adlı boş bir metin dosyası işe yarar.
RMorrisey

78

Ayrıca -oHostKeyAlgorithms=+ssh-dssssh satırınıza ekleyebilirsiniz :

ssh -oHostKeyAlgorithms=+ssh-dss user@host

Bu, en hızlı çözümdür, çünkü aynı zamanda bu ana bilgisayar için sorunu kalıcı olarak düzeltir. Uzun dönem için bir başka öneri de, eğer mümkünse, ana bilgisayar sisteminin SSH arka plan programının yükseltilmesi gerektiğidir, çünkü DSS artık çok güvenli olarak görülmemektedir.
Areeb Soo Yasir

20

Benim için bu işe yaradı: (eklendi .ssh\config)

Host *
HostkeyAlgorithms +ssh-dss
PubkeyAcceptedKeyTypes +ssh-dss

İkinci seçenek sorunla ilgili değildir ve birincisi cevabımda zaten belirtilmiştir.
Jakuje

Host your-host benim için çalışmadı, host your-your-host is the name of ssh command from (client). Ancak Host * benim için çalıştı.
Krischu

2
@Krischu hayır, karşı yuor-hostkoştuğunuz ev sahibi ssh. Tüm ana bilgisayarlar için güvenli olmayan varsayılan ayarlamak her zaman kötü bir fikirdir.
Jakuje

10

Benim gibiyseniz ve bu güvenlik boşluğunu sistemi veya kullanıcı genelinde yapmak istemiyorsanız, o depolarda bu komutu çalıştırarak buna ihtiyaç duyan tüm git depolarına bir yapılandırma seçeneği ekleyebilirsiniz. (not yalnızca git sürüm> = 2.10 ile çalışır, 2016-09-04 yayınlandı)

git config core.sshCommand 'ssh -oHostKeyAlgorithms=+ssh-dss'

Ancak bu, yalnızca depo kurulduktan sonra çalışır. El ile uzaktan kumanda eklemek istemiyorsanız (ve sadece klonlamak istiyorsanız), klonu şu şekilde çalıştırabilirsiniz:

GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss' git clone ssh://user@host/path-to-repository

sonra kalıcı hale getirmek için ilk komutu çalıştırın.

En yenisine sahip değilseniz ve yine de deliği olabildiğince yerel tutmak istiyorsanız,

export GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss'

bir yerde bir dosyada, örneğin git_ssh_allow_dsa_keys.shve sourcegerektiğinde onu dökerek.


3

Sunucu tarafındaki çözümle biraz işbirliği yapmak istiyorum. Dolayısıyla, sunucu DSA'yı desteklemediğini söylüyor, bunun nedeni openssh istemcisinin varsayılan olarak onu etkinleştirmemesidir :

OpenSSH 7.0 ve sonraki sürümler, ssh-dss (DSA) genel anahtar algoritmasını benzer şekilde devre dışı bırakır. O da zayıftır ve kullanımına karşı tavsiye ederiz.

Bu nedenle, bunu sunucu tarafında düzeltmek için RSA veya ECDSA gibi diğer Anahtar algoritmalarını etkinleştirmeliyim. Bir LAN'daki sunucu ile bu problemi yaşadım. Aşağıdakileri öneririm:

Openssh'ı güncelleyin:

yum update openssh-server

Bir sshd_config.rpmnew varsa, sshd_config içindeki yeni konfigürasyonları birleştirin.

/ Etc / ssh / konumunda ana bilgisayar anahtarları olduğunu doğrulayın. Yenilerini oluşturmazsanız, bakın man ssh-keygen.

$ ll /etc/ssh/
total 580
-rw-r--r--. 1 root root     553185 Mar  3  2017 moduli
-rw-r--r--. 1 root root       1874 Mar  3  2017 ssh_config
drwxr-xr-x. 2 root root       4096 Apr 17 17:56 ssh_config.d
-rw-------. 1 root root       3887 Mar  3  2017 sshd_config
-rw-r-----. 1 root ssh_keys    227 Aug 30 15:33 ssh_host_ecdsa_key
-rw-r--r--. 1 root root        162 Aug 30 15:33 ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys    387 Aug 30 15:33 ssh_host_ed25519_key
-rw-r--r--. 1 root root         82 Aug 30 15:33 ssh_host_ed25519_key.pub
-rw-r-----. 1 root ssh_keys   1675 Aug 30 15:33 ssh_host_rsa_key
-rw-r--r--. 1 root root        382 Aug 30 15:33 ssh_host_rsa_key.pub

/ Etc / ssh / sshd_config içinde HostKey yapılandırmasını doğrulayın. RSA ve ECDSA konfigürasyonuna izin vermelidir. (Eğer tümü varsayılan olarak yorumlanmışsa man sshd_config, RSA'ya da izin verecektir , HostKey kısmına bakınız).

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

İstemci tarafı için, yalnızca şunu yaparak ssh için bir anahtar oluşturun (sorudaki gibi bir DSA değil):

ssh-keygen

Bundan sonra, ssh-dss'den (DSA) daha fazla seçenek olduğundan, istemci openssh (> = v7) RSA veya daha iyi bir algoritma ile bağlantı kurmalıdır.

İşte başka bir güzel makale.

Bu benim cevapladığım ilk soru, önerileri memnuniyetle karşılıyorum: D.


1

Birden çok algoritma nasıl belirlenir? Soruyorum çünkü git, çalışma dizüstü bilgisayarımda yeni güncellendi (Windows 10, Windows için resmi Git'i kullanarak) ve Azure DevOps uzaktan kumandama bir proje dalı göndermeye çalıştığımda bu hatayı aldım. --Set-upstream'i zorlamaya çalıştım ve şunu aldım:

Unable to negotiate with 20.44.80.98 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Öyleyse, her ikisine de izin veren yukarıdaki öneriler nasıl uygulanır? (Hızlı bir çözüm olarak, group14 ile @ golvok'un çözümünü kullandım ve işe yaradı, ancak 1 veya 14'ün daha iyi olup olmadığını gerçekten bilmiyorum, vb.)


-3

Ya yukarıdaki yaklaşımı takip edersiniz ya da bu

.Ssh dizininde yapılandırma dosyasını oluşturun ve bu satırı ekleyin.

host xxx.xxx
 Hostname xxx.xxx
 IdentityFile ~/.ssh/id_rsa
 User xxx
 KexAlgorithms +diffie-hellman-group1-sha1

Bu tamamen farklı bir sorunu çözmektir.
Jakuje
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.