SSHでUnable to negotiate with xxx.xxx.xxx.xxxと表示されて接続できない時の対処法

接続できない理由

SSH公開鍵認証、接続元と接続先のSSHバージョンによって起こる現象です。

Ubuntu 22.04.1 LTSから古いサーバーにSSHすると「no matching host key type found. Their offer: ssh-rsa,ssh-dss」と表示されて接続できなかった時の記録です。

Unable to negotiate with xxx.xxx.xxx.xxx port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

OpenSSH 8.8以降 SHA-1 RSAが無効になった

Ubuntu 20.04.5 LTSは問題なく接続できる。

OpenSSHかOpenSSLのバージョンに関係ありそう。

OpenSSH8.8からSHA-1のRSA鍵が無効になったのが原因です。

一時的な対処法

最初に「Ubuntu 22から接続ができなかった」と書きましたが、厳密にはOpenSSH8.8以降からOpenSSH7.2以前のサーバーに繋ぐ際の対処方法になります。

HostKeyAlgorithmsとPubkeyAcceptedAlgorithmsを指定

一時的な対処法としSSHクライアント側(OpenSSH8.8以降)で、鍵のアルゴリズムを指定する方法を紹介します。

ssh -oHostKeyAlgorithms=+ssh-rsa -oPubkeyAcceptedAlgorithms=+ssh-rsa USER_NAME@SERVER_NAME

複数の秘密鍵がある場合

秘密鍵を複数保持している場合は「-i」で秘密鍵の場所とファイル名を指定します。

ssh -oHostKeyAlgorithms=+ssh-rsa -oPubkeyAcceptedAlgorithms=+ssh-rsa -i /home/USER_NAME/.ssh/id_rsa USER_NAME@SERVER_NAME

恒久的な対処法

リモートログインをしようとするユーザーのディレクトリに設定ファイル設置する方法です。

設定ファイルを作ることで、毎回HostKeyAlgorithmsやPubkeyAcceptedAlgorithmsの指定をしなくて済むようになります。

例えば、trinityというユーザーの場合。

tiniryのホームディレクトリの下の「.ssh」というディレクトにcdします。

設定ファイルを「.ssh」ディレクトリに作成

cd /home/trinity/.ssh

「.ssh」の中にconfigというファイルをvimで作成。

vi config

configファイルの中身

Host SERVER_NAME
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes
    HostKeyAlgorithms=+ssh-rsa
    PubkeyAcceptedAlgorithms=+ssh-rsa

1行目 :HostにはIPアドレスかホスト名を入力
2行目 :秘密鍵のパス
3行目 :指定した秘密鍵のみを使用
4行目 :秘密鍵の種類
5行目 :ホスト公開鍵の種類

configファイルのパーミッション変更

chmod 600 config

重要なファイルなので権限を600に変更します。

ssh USER_NAME@SERVER_NAME

SSH接続できるようになりましたか?

SSHのバージョン確認

Ubuntu 22.04.1 LTSのOpenSSHのバージョンを確認してみましょう。

ssh -V

Ubuntu 22.04.1 LTS

OpenSSH_8.9p1 Ubuntu-3, OpenSSL 3.0.2 15 Mar 2022

SHA-1 RSA鍵が無効になったのはOpenSSH 8.8からでした。

Ubuntu 20.04.5 LTS

OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f  31 Mar 2020

Ubuntu 20はOpenSSH 8.2なので古いサーバーにも接続できていた理由が分かります。

まとめ

今回はSSHのクライアント側で秘密鍵と公開鍵タイプを指定して接続しました。

もう一つの方法はSSH公開鍵認証のキーペアを作り直す方法もあります。

その方法はSSH公開鍵認証の記事に書きます。

関連記事

コメント

この記事へのコメントはありません。

おすすめ記事

  1. 【多段SSH】公開鍵認証で中継サーバー経由のログインが簡単!

  2. インターネットに繋いだサーバーで最初にやらなければならない設定

  3. Swapアウトしているプロセスを特定する方法

  4. Linuxを極めるならコマンドよりも〇〇が先だ!!

  5. お名前ドットコムのDNS設定方法