Skip to content

SSH-RSA ホストキーエラーの解決方法

問題

Git 操作中に以下のエラーが発生する場合があります:

bash
$ 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 アルゴリズムを再有効化することです。

  1. ~/.ssh/config ファイルを編集します(存在しない場合は新規作成):
bash
nano ~/.ssh/config
  1. 以下の内容を追加します:
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以外のサービスで問題が発生する場合、該当するホスト名を指定してください:

ssh-config
Host your-server-domain.com
  PubkeyAcceptedAlgorithms +ssh-rsa
  HostkeyAlgorithms +ssh-rsa

方法2: コマンドラインオプションでの一時的な対応

一時的に接続するだけの場合は、コマンドラインオプションでアルゴリズムを指定できます:

bash
ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa user@hostname

Git操作の場合:

bash
git clone -c "core.sshCommand=ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa" user@hostname:repository.git

方法3: システム全体の設定変更(上級者向け)

macOSやLinuxでシステム全体の設定を変更する場合:

bash
sudo nano /etc/ssh/ssh_config

以下の行を追加:

ssh-config
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa

注意

システム全体の設定変更はすべてのSSH接続に影響します。セキュリティリスクを理解した上で実施してください。

プラットフォーム別注意点

Windows (Git Bash)

Windowsでは、以下の手順で設定ファイルを作成します:

bash
# .sshディレクトリに移動
cd ~/.ssh

# configファイルを作成(存在しない場合)
touch config

# ファイルを編集
notepad config

NixOSの場合

NixOSでは、configuration.nix に以下を追加します:

nix
programs.ssh.extraConfig = ''
  PubkeyAcceptedAlgorithms +ssh-rsa
  HostkeyAlgorithms +ssh-rsa
'';

根本的な解決

このワークアラウンドは一時的な対策です。長期的には以下の解決策を検討してください:

  1. サービスのアップデート: Azure DevOpsなどにセキュリティアップデートを要求する
  2. HTTPSの使用: SSHの代わりにHTTPSプロトコルを使用する
  3. 現代的なアルゴリズムの採用: サービスプロバイダーにより安全なアルゴリズム(ed25519など)のサポートを促す

トラブルシューティング

設定が反映されない場合:

  1. ファイルのパーミッションを確認:chmod 600 ~/.ssh/config
  2. SSH設定の構文を確認:ssh -T git@ssh.dev.azure.com
  3. 使用中のSSHバージョンを確認:ssh -V

情報

Azure DevOpsの最新状況については、公式ドキュメントで常に最新情報を確認してください。

まとめ

no matching host key type found エラーは、現代的なSSHクライアントとレガシーなサーバー間の互換性問題です。一時的な解決策としてSSH設定の調整が必要ですが、長期的にはより安全な接続方法への移行を推奨します。