私は自分のWebホスト上にgitリポジトリを作成し、それを自分のコンピュータ上にクローンしようとしています。これが私がしたことです:
ssh-keygen -t dsa
を生成しました。~/.ssh
でサーバー公開鍵にコピーしました。そして、git clone ssh://user@Host/path-to-repository
コマンドを実行しようとすると、エラーが発生します。
XX.XXX.XX.XXとネゴシエートできません。一致するホストキータイプが見つかりません。彼らの申し出:ssh-dss
fatal:リモートリポジトリから読み込めませんでした。
正しいアクセス権があり、リポジトリが存在することを確認してください。
どういう意味ですか?
最近の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
Sshの行に-oHostKeyAlgorithms=+ssh-dss
を追加することもできます。
ssh -oHostKeyAlgorithms=+ssh-dss user@Host
私にとってこれはうまくいきました:(.ssh\config
に追加された)
Host *
HostkeyAlgorithms +ssh-dss
PubkeyAcceptedKeyTypes +ssh-dss
あなたが私のようで、このセキュリティホールをシステム全体にしたくない、あるいはユーザ全体にしたくないのなら、これらのリポジトリでこのコマンドを実行することで、これを必要とする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
にする。
サーバー側のソリューションと少し協力したいです。だから、サーバーはそれが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。