sshで急に接続できなくなった場合の対処方法 (no matching host key type found. Their offer: ssh-rsa,ssh-dss)

no matching host key type found. Their offer: ssh-rsa,ssh-dss

というエラーメッセージでssh接続できない場合は ~/.ssh/config の末尾に以下の三行を加えればとりあえず接続できるようになります

Host *
   HostKeyAlgorithms=+ssh-rsa
   PubkeyAcceptedAlgorithms=+ssh-rsa

説明

2005年ごろまでに設定されたsshdでは,サーバの署名としてSHA-1RSA鍵が広く利用されていました.しかしSHA-1は2005年に攻撃方法が発見され,2010年にはSHA-1は廃止,より安全な鍵に移行するという方針になります.そして2021年ついにOpenSSHもSHA-1の鍵をデフォルトで無効化しました.

そのため新しいOpenSSHのクライアント(sshコマンド)で,未だにSHA-1 RSA鍵を使っている古いsshdに接続すると

no matching host key type found. Their offer: ssh-rsa,ssh-dss

というエラーが出てssh接続できなくなります

対処方法

対処方法は

  1. サーバー(sshd側)の署名を新しく作り直す
  2. クライアント側(sshコマンド側)で古いSHA-1鍵も使えるように設定する
  3. クライアント側(sshコマンド側)を古いバージョンに巻き戻す

の3つあります

二番めの方法は

Host *
   HostKeyAlgorithms=+ssh-rsa
   PubkeyAcceptedAlgorithms=+ssh-rsa

で,これで全ホスト(Host *)でssh-rsa鍵が使えるようになります

セキュリティ的に不安を感じる場合は

Host *.hogehoge
   HostKeyAlgorithms=+ssh-rsa
   PubkeyAcceptedAlgorithms=+ssh-rsa

と設定すれば ドメインhogehoge以下のサーバ(*.hogehoge)のみで ssh-rsaを許可できます