SSH-RSA ホストキーエラーの解決方法
問題
Git 操作中に以下のエラーが発生する場合があります:
$ git pull
Unable to negotiate with 172.16.42.42 port 22: no matching host key type found. Their offer: ssh-rsa
fatal: Could not read from remote repository.
このエラーは、OpenSSH のセキュリティアップデートにより、非推奨となった ssh-rsa
(RSA/SHA-1)アルゴリズムが原因で発生します。
背景
OpenSSH 8.2(2020年2月リリース)以降、セキュリティ上の理由から SHA-1 ハッシュアルゴリズムに依存する ssh-rsa
署名方式が非推奨となりました。しかし、Azure DevOps などの一部のサービスでは、依然としてこの古いアルゴリズムのみをサポートしている場合があります。
セキュリティ注意
ssh-rsa
(RSA/SHA-1)は暗号学的に脆弱と見なされています。可能な場合は、より安全なホスティングサービス(GitHub、GitLab、Bitbucketなど)の使用やHTTPS接続を検討してください。
解決方法
方法1: SSH設定ファイルの編集(推奨)
最も一般的な解決策は、SSH設定ファイルを編集して ssh-rsa
アルゴリズムを再有効化することです。
~/.ssh/config
ファイルを編集します(存在しない場合は新規作成):
nano ~/.ssh/config
- 以下の内容を追加します:
Host ssh.dev.azure.com
User git
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa
Host vs-ssh.visualstudio.com
User git
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa
他のサービスの場合
Azure DevOps以外のサービスで問題が発生する場合、該当するホスト名を指定してください:
Host your-server-domain.com
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa
方法2: コマンドラインオプションでの一時的な対応
一時的に接続するだけの場合は、コマンドラインオプションでアルゴリズムを指定できます:
ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa user@hostname
Git操作の場合:
git clone -c "core.sshCommand=ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa" user@hostname:repository.git
方法3: システム全体の設定変更(上級者向け)
macOSやLinuxでシステム全体の設定を変更する場合:
sudo nano /etc/ssh/ssh_config
以下の行を追加:
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
注意
システム全体の設定変更はすべてのSSH接続に影響します。セキュリティリスクを理解した上で実施してください。
プラットフォーム別注意点
Windows (Git Bash)
Windowsでは、以下の手順で設定ファイルを作成します:
# .sshディレクトリに移動
cd ~/.ssh
# configファイルを作成(存在しない場合)
touch config
# ファイルを編集
notepad config
NixOSの場合
NixOSでは、configuration.nix
に以下を追加します:
programs.ssh.extraConfig = ''
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa
'';
根本的な解決
このワークアラウンドは一時的な対策です。長期的には以下の解決策を検討してください:
- サービスのアップデート: Azure DevOpsなどにセキュリティアップデートを要求する
- HTTPSの使用: SSHの代わりにHTTPSプロトコルを使用する
- 現代的なアルゴリズムの採用: サービスプロバイダーにより安全なアルゴリズム(ed25519など)のサポートを促す
トラブルシューティング
設定が反映されない場合:
- ファイルのパーミッションを確認:
chmod 600 ~/.ssh/config
- SSH設定の構文を確認:
ssh -T git@ssh.dev.azure.com
- 使用中のSSHバージョンを確認:
ssh -V
情報
Azure DevOpsの最新状況については、公式ドキュメントで常に最新情報を確認してください。
まとめ
no matching host key type found
エラーは、現代的なSSHクライアントとレガシーなサーバー間の互換性問題です。一時的な解決策としてSSH設定の調整が必要ですが、長期的にはより安全な接続方法への移行を推奨します。