Unable to negotiate with サーバーアドレス port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

tux logo Linux
スポンサーリンク

環境

サーバー側

  • CentOS release 6.9 (Final)
  • OpenSSL 1.0.1e-fips 11 Feb 2013

古っ。

クライアント側

  • macOS 15「Sequoia(セコイア)」
  • terminal.app

事象

sshアクセスを試みたら以下のエラーMSGを出力し、接続できない。

 Unable to negotiate with サーバーアドレス port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

原因

SSHクライアントとサーバー間で使用可能な鍵アルゴリズムが一致しないため。

ざっくりいうと、サーバー側のSSHが古いんすな。

対処

クライアント側

ssh -oHostKeyAlgorithms=+ssh-rsa ユーザー@サーバー

で接続する。(パスワード方式の場合)

~/.ssh/configに書く場合は以下の感じ。

Host 任意のサーバーの名前(sshコマンドのオプションで指定する名前)
    HostKeyAlgorithms +ssh-rsa

しかしこれはセキュリティ的に非推奨。サーバー側が古くてセキュリティ的に危険なので。

サーバー側

必要に応じて以下の対処をする。

  • OSがサポート切れの場合、最新化する
  • OpenSSHをバージョンアップして脆弱性が無い新しいバージョンにする
  • 新しいキーベアを作成する(以下全て未検証。AIに聞いたょ。)
    • sudo ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key -N “”
    • /etc/ssh/sshd_config に以下の行を追加
      • HostKey /etc/ssh/ssh_host_rsa_key
    • sshd再起動
      • sudo systemctl restart sshd
    • CentOS5.3の場合ecdsaがサポートされています。以下のコマンドでECDSAキーを生成します。
      • ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N “”
      • /etc/ssh/sshd_configに以下の行を追加します。
        • HostKey /etc/ssh/ssh_host_ecdsa_key
      • SSH再起動
        • sudo systemctl restart sshd

sshdの設定をいじる場合は万が一sshが繋がらなくなってしまっても対処可能な状況で実行すること。
→sshが繋がらなくなっても、アタシ、責任取れないんだからね!

コメント

タイトルとURLをコピーしました