Неможливо домовитись з XX.XXX.XX.XX: не знайдено відповідного типу хост-ключа. Їх пропозиція: ssh-dss


110

Я намагаюся створити сховище git на своєму веб-хості та клонувати його на своєму комп’ютері. Ось що я зробив:

  1. Я створив сховище на віддаленому сервері.
  2. Я створив пару ключів: ssh-keygen -t dsa.
  3. Я додав свій ключ до ssh-агента.
  4. Я скопіював відкритий ключ на сервер у ~/.ssh.

А потім, після спроби запуску команди git clone ssh://user@host/path-to-repository, я отримую помилку:

Неможливо домовитись з XX.XXX.XX.XX: не знайдено відповідного типу хост-ключа. Пропозиція: ssh-dss
fatal: Не вдалося прочитати з віддаленого сховища.
Переконайтеся, що у вас є правильні права доступу та сховище існує.

Що це означає?


Відповіді:


171

Недавно відкрита версія за замовчуванням застаріла, клавіша DSA. Вам слід запропонувати своєму постачальнику GIT додати якийсь розумний хост-ключ. Покладатися лише на DSA - це не дуже гарна ідея.

Для вирішення проблеми потрібно сказати своєму sshклієнту, що ви бажаєте прийняти хости-ключі DSA, як це описано в офіційній документації для попереднього використання . У вас є мало можливостей, але я рекомендую додати наступні рядки у свій ~/.ssh/configфайл:

Host your-remote-host
    HostkeyAlgorithms +ssh-dss

Інша можливість полягає у використанні змінної середовища GIT_SSHдля визначення цих параметрів:

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

1
Тепер він працює, не вказуючи ім'я хоста, просто з HostkeyAlgorithms +ssh-dss. Дякую.
giovannipds

1
@giovannipds Безумовно, це повинен бути віддалений хост, до якого ви підключаєтесь. @ downvoters Пояснення грошей було б добре.
Jakuje

@Jakuje Вибачте, я натиснув неправильно, і через неможливість змінитись, я не зміг оновити свою відповідь.
giovannipds

1
@Jakuje Я вже оновив свій голос, просто щоб вас повідомити. =)
giovannipds

Якщо у вашому .ssh-каталозі такого файлу немає, буде виконано порожній текстовий файл під назвою "config".
RMorrisey

78

Ви також можете додати -oHostKeyAlgorithms=+ssh-dssв свій ssh ​​рядок:

ssh -oHostKeyAlgorithms=+ssh-dss user@host

Це найшвидше рішення +1, оскільки воно також назавжди вирішує проблему для цього хоста. Ще однією пропозицією для довгострокових є те, що, якщо можливо, хост-система повинна мати оновлений демон SSH, оскільки, схоже, DSS, це вже не вважається дуже безпечним.
Areeb Soo Yasir

20

Для мене це спрацювало: (додано в .ssh\config)

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

Другий варіант не пов'язаний з проблемою, а перший вже згадується у моїй відповіді.
Jakuje

Хост ваш хост не працював для мене, за умови, що ваш хост - ім'я хоста, з якого я запускаю команду ssh (client). Але Хост * працював на мене.
Крищу,

2
@Krischu ні, yuor-hostце господар, sshпроти якого ти борешся . Встановити небезпечний за замовчуванням для всіх хостів завжди погана ідея.
Jakuje

10

Якщо ви схожі на мене, і хочете скоріше не робити цю систему дірок для безпеки або загальнокористувацькою, тоді ви можете додати параметр config до будь-яких git repos, які потребують цього, виконавши цю команду в цих репост. (Примітка працює лише з версією git> = 2.10, випущена 2016-09-04)

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

Це працює лише після налаштування репо. Якщо вам не зручно додавати віддалений вручну (а просто хочете клонувати), ви можете запустити клон так:

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

потім запустіть першу команду, щоб зробити її постійною.

Якщо у вас немає останніх і все-таки хочете зберегти отвір якомога локальніше, рекомендую покласти

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

у файлі десь, скажімо git_ssh_allow_dsa_keys.sh, і в sourceразі потреби.


3

Я хочу трохи співпрацювати з рішенням для серверного боку. Отже, сервер каже, що не підтримує DSA, це тому, що клієнт opensh не активує його за замовчуванням :

Аналогічно, OpenSSH 7.0 і більше відключають алгоритм відкритого ключа ssh-dss (DSA). Він теж слабкий, і ми рекомендуємо проти його використання.

Отже, щоб виправити це на серверній стороні, я повинен активувати інші ключові алгоритми, такі як RSA o ECDSA. У мене просто була ця проблема з сервером в лан. Я пропоную наступне:

Оновіть opensh:

yum update openssh-server

Об’єднайте нові конфігурації в sshd_config, якщо є sshd_config.rpmnew.

Перевірте, чи є ключі хостів за адресою / etc / ssh /. Якщо не створюються нові, див 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 конфігурацію HostKey. Він повинен допускати конфігурацію RSA та ECDSA. (Якщо всі вони коментуються за замовчуванням, це також дозволить отримати RSA, див. У man sshd_configчастині HostKey).

# 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

Для клієнтської сторони створіть ключ для ssh (не DSA, як у запитанні), просто зробивши це:

ssh-keygen

Після цього, оскільки існує більше варіантів, ніж ssh-dss (DSA), клієнт openssh (> = v7) повинен з'єднуватися з RSA або кращим алгоритмом.

Ось ще одна гарна стаття.

Це моє перше відповідь, я вітаю пропозиції: D.


1

Як можна вказати кілька алгоритмів? Я запитую, тому що git щойно оновився на моєму робочому ноутбуці (Windows 10, використовуючи офіційну програму Git for Windows,), і я отримав цю помилку, коли спробував відсунути відділення проекту до мого пульта Azure DevOps. Я спробував просунути -set-upstream і отримав це:

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.

То як би реалізувати наведені вище пропозиції, що дозволяють обидва ці? (Як швидке завершення роботи, я використав рішення @ golvok з group14, і воно спрацювало, але я дійсно не знаю, чи краще 1 чи 14 тощо).


-3

Ви або дотримуєтесь вищевказаного підходу або цього

Створіть конфігураційний файл у каталозі .ssh та додайте цей рядок.

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

Це вирішує зовсім іншу проблему.
Jakuje
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.