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

Я пытаюсь создать репозиторий git на моем веб-хосте и клонировать его на своем компьютере. Вот что я сделал:

  • Я создал репозиторий на удаленном сервере.
  • Я создал пару ключей: ssh-keygen -t dsa.
  • Я добавил свой ключ в ssh-agent.
  • Я скопировал на открытый ключ сервера в ~/.ssh.

И затем, после попытки выполнить команду git clone ssh://[email protected]/path-to-repository, я получаю сообщение об ошибке:

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

Что это значит?

Ответ 1

По умолчанию устаревшие версии DSS-версий версии openssh. Вы должны предложить вашему поставщику 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://[email protected]/path-to-repository

Ответ 2

Вы также можете добавить -oHostKeyAlgorithms=+ssh-dss в строку ssh:

ssh -oHostKeyAlgorithms=+ssh-dss [email protected]

Ответ 3

Для меня это сработало: (добавлено в .ssh\config)

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

Ответ 4

Если вы похожи на меня и, скорее всего, не сделаете эту систему дыр в системе безопасности или в рамках всего пользовательского интерфейса, то вы можете добавить опцию конфигурации в любые репозитории git, которые нуждаются в этом, запустив эту команду в этих репозиториях. (примечание работает только с git version >= 2.10, выпущено 2016-09-04)

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

Это работает только после настройки репо. Если вам не удобно добавлять удаленный вручную (и просто хотите клонировать), вы можете запустить клон следующим образом:

GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss' git clone ssh://[email protected]/path-to-repository

затем запустите первую команду, чтобы сделать ее постоянной.

Если у вас нет последней версии и по-прежнему хотелось бы, чтобы отверстие было как можно более местным, я рекомендую положить

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

в файле где-нибудь, скажем git_ssh_allow_dsa_keys.sh и source, когда это необходимо.

Ответ 5

Я хочу немного сотрудничать с решением для серверной части. Таким образом, сервер говорит, что он не поддерживает DSA, это потому, что openssh клиент не активирует его по умолчанию:

OpenSSH 7.0 и выше аналогично отключают алгоритм открытого ключа ssh-dss (DSA). Он слишком слаб, и мы рекомендуем его использовать.

Итак, чтобы исправить это на стороне сервера, я должен активировать другие алгоритмы Key, такие как RSA o ECDSA. У меня просто была проблема с сервером в LAN. Я предлагаю следующее:

Обновить openssh:

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.

Ответ 6

Вы либо придерживаетесь подхода, либо этого

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

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