XX.XXX.XX.XXとネゴシエートできません:一致するホストキータイプが見つかりません。彼らの申し出:ssh-dss


110

私は自分のWebホストにgitリポジトリを作成し、自分のコンピューターに複製しようとしています。これが私がしたことです:

  1. リモートサーバーにリポジトリを作成しました。
  2. 鍵ペアを生成しました:ssh-keygen -t dsa
  3. 鍵をssh-agentに追加しました。
  4. でサーバーの公開鍵をコピーしました~/.ssh

そして、コマンドを実行しようとするとgit clone ssh://user@host/path-to-repository、エラーが発生します。

XX.XXX.XX.XXとネゴシエートできません:一致するホストキータイプが見つかりません。彼らの申し出:ssh-dss
fatal:リモートリポジトリから読み込めませんでした。
正しいアクセス権があり、リポジトリが存在することを確認してください。

どういう意味ですか?


回答:


171

最近のopensshバージョンでは、デフォルトで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 2016

1
@giovannipds確かに、接続するリモートホストである必要があります。@反対投票者反対投票を説明するといいでしょう。
Jakuje

@Jakuje申し訳ありませんが、間違ってクリックしました。すぐに変更することができないため、回答を更新できませんでした。
giovannipds 2017年

1
@Jakuje投票を更新しました。=)
giovannipds 2017年

.sshディレクトリにそのようなファイルがない場合は、「config」という名前の空のテキストファイルで十分です。
RMorrisey 2017年

78

-oHostKeyAlgorithms=+ssh-dssssh行に追加することもできます:

ssh -oHostKeyAlgorithms=+ssh-dss user@host

これは、そのホストの問題を完全に修正するため、最も迅速な解決策+1です。長期的には、DSSのように見える場合、ホストシステムのSSHデーモンをアップグレードしておくと、非常に安全であるとは考えられなくなります。
Areeb Soo Yasir

20

私にとってこれはうまくいきました:(に追加されました.ssh\config

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

2番目のオプションは問題に関連しておらず、1番目のオプションはすでに私の回答で言及されています。
Jakuje 2016年

ホストyour-hostが機能しませんでした。your-hostが(クライアント)からsshコマンドを実行しているホストの名前である場合。しかし、ホスト*は私のために働きました。
Krischu

2
@クリシュいいえ、yuor-hostあなたがssh対戦しているホストです。すべてのホストに安全でないデフォルトを設定することは常に悪い考えです。
Jakuje 16

10

私のようで、このセキュリティホールシステムやユーザー全体を作りたくない場合は、これらのリポジトリでこのコマンドを実行することにより、これを必要とするgitリポジトリに構成オプションを追加できます。(注意: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.shsource必要なときにそれを使ってください。


3

サーバー側のソリューションと少し連携したい。したがって、サーバーはDSAをサポートしていないと言っています。これは、opensshクライアントがデフォルトでアクティブ化しないためです

OpenSSH 7.0以降も同様に、ssh-dss(DSA)公開鍵アルゴリズムを無効にします。それも弱いので、使用しないことをお勧めします。

したがって、これをサーバー側で修正するには、RSAまたはECDSAなどの他のキーアルゴリズムをアクティブにする必要があります。LAN内のサーバーでこの問題が発生しました。私は以下を提案します:

opensshを更新します。

yum update openssh-server

sshd_config.rpmnewがある場合は、sshd_configに新しい構成をマージします。

/ 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

複数のアルゴリズムをどのように指定しますか?仕事用のラップトップ(Windows 10、公式のGit for Windowsビルドを使用)でgitが更新されたため、プロジェクトブランチを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.

それで、これらの両方を可能にする上記の提案をどのように実装しますか?(すぐに始められるように、私はgroup14で@golvokのソリューションを使用しましたが、うまくいきましたが、1と14のどちらが優れているかなどは本当にわかりません。)


-3

あなたは上記のアプローチまたはこれのいずれかに従います

.sshディレクトリに構成ファイルを作成し、これらの行を追加します。

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

それは完全に異なる問題を解決しています。
ジャクジェ2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.