web-dev-qa-db-ja.com

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

私は自分の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:リモートリポジトリから読み込めませんでした。
正しいアクセス権があり、リポジトリが存在することを確認してください。

どういう意味ですか?

106
Nikita Gorshkov

最近のopensshバージョンはデフォルトでDSAキーを廃止しました。あなたはあなたのGITプロバイダーにいくつかの合理的なHostキーを追加するように勧めます。 DSAだけに頼ることはお勧めできません。

回避策として、 従来の使用法に関する公式文書 で説明されているように、DSAホストキーを受け入れることをsshクライアントに伝える必要があります。可能性はほとんどありませんが、これらの行を~/.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
167
Jakuje

Sshの行に-oHostKeyAlgorithms=+ssh-dssを追加することもできます。

ssh -oHostKeyAlgorithms=+ssh-dss user@Host
73
Guillaume

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

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

あなたが私のようで、このセキュリティホールをシステム全体にしたくない、あるいはユーザ全体にしたくないのなら、これらのリポジトリでこのコマンドを実行することで、これを必要とするgitリポジトリにconfigオプションを追加できます。 (注は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にする。

8
golvok

サーバー側のソリューションと少し協力したいです。だから、サーバーはそれがDSAをサポートしていないと言っている、これは opensshクライアントがデフォルトでそれを有効にしないからです

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

それで、これをサーバ側で修正するために、RSAやECDSAのような他のキーアルゴリズムを有効にするべきです。私はLAN内のサーバーでこの問題を抱えていました。私は以下を提案します:

Opensshを更新します。

yum update openssh-server

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

/ etc/ssh /にhostsキーがあることを確認してください。新しいものが生成されない場合は、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。

2
Gus Calca