目次
接続できない理由
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公開鍵認証の記事に書きます。
コメント