Webデザイン

macOSをVenturaにアップグレードしたらSSH接続ができなくなった際の解決方法

macOSをVenturaにアップグレードしたらSSH接続ができなくなった際の解決方法

どうもこんにちは。
Web/App/UIデザイナーのサトウです。

今回は、macOSをVenturaにアップグレードしたらSSH接続ができなくなった際の解決方法について書いていきます。

なんだか近年、macOSのバージョンを上げるたびにSSHやVPNでトラブルが起きている気がします。
まぁ、どんどん仕様が変わっていって、それを追いかけなければいけないのは仕方ないといえば仕方ないことですが。。。

サーバーにSSH接続ができなくなった

先ほど、あるクライアントの業務をこなそうと、開発環境にSSH接続を試みたところ、これまで普通にできていた秘密鍵+公開鍵での認証による接続ができなくなっていました

ターミナルには以下のメッセージが。

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

「そのホストと接続できないよ。違うタイプの鍵(ssh-rsa,ssh-dss)を求められているよ。」ということのようです。

「Unable to negotiate with」や「no matching host key type found」でGoogle検索してみると、同じように「macOSをVenturaにアップグレードしたらSSH接続ができなくなった」といった内容の記事がいくつか出てきました。
また、macOSに限らず、さまざまな環境で「鍵ペア認証でのSSH接続ができなくなった」という記事が散見されます。

どうやら僕のケースは、「macOSのバージョンを上げたことで同時にOpenSSHのバージョンも上がり、これまで使えていた認証方法が使えなくなった」ということでした。
秘密鍵+公開鍵のペアを使った認証が使えなくなったわけではなく、使える鍵のバージョンが変わった(古いアルゴリズムを使ったRSA=ssh-rsaが廃止された)ということのようです。

これに対し、接続しようとしているホスト(サーバー)はこれまでどおり古いバージョンの認証を求めてきているのでエラーになる、ということです。

sshのconfigファイルに設定を追加して解決(暫定的に)

Macにインストールされている新しいバージョンのSSHでも、かつてと同じ認証方法で接続できるよう、configファイルに設定を追加してあげると、この問題が解消されます。
「暫定的に」と書いたのは、この方法がベストの解決方法ではないからです。
それについては後述します。

MacのストレージにおけるSSHconfigファイルの場所はこちらです。

/ユーザ/username/.ssh/config

configファイルを開くと

Host *
ForwardAgent yes

という記述があったので、その下に

HostKeyAlgorithms ssh-rsa,ssh-dss
PubkeyAcceptedAlgorithms +ssh-rsa

を追加したところ以前と同じようにSSH接続することができました。

「+」を付けないと「追加」ではなく「指定」になってしまう

前述の記述方法では、HostKeyAlgorithms の行を

HostKeyAlgorithms ssh-rsa,ssh-dss

としており、アルゴリズムをssh-rsaとssh-dssに限定する形で指定してしまっていました。
これでは他のアルゴリズムを使用する他のホストで接続不可になってしまうので、下記のように「+」を追加しました。

HostKeyAlgorithms +ssh-rsa,ssh-dss
PubkeyAcceptedAlgorithms +ssh-rsa

Hostを指定しないと他のSSH接続にも影響が出てしまう

前述した古いアルゴリズムを使った鍵認証をすべてのホストに対して適用してしまうと、別のサーバーにSSH接続しようとしたときに接続できないといった悪影響が出るケースがあります。

よって、configファイルにもともと記載のあった

Host *
ForwardAgent yes

はそのまま残し、その下にホストを指定する行

Host **.**.**.**

を追加し、

Host **.**.**.**
  KexAlgorithms +diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
  HostKeyAlgorithms +ssh-rsa,ssh-dss
  PubkeyAcceptedAlgorithms +ssh-rsa

としました。

※**.**.**.**には実際のホスト名(数字と.の組み合わせまたはドメイン名)を入力します。

別の方法で根本的な解決をするのが望ましい

今回これまで通りの方法でSSH接続できなくなったのはセキュリティ的な観点からの仕様変更で、「危ないから使わないでね」と言われている方法を継続して使い続けるのは望ましくないですね。

なるべく早く、新しいアルゴリズムに対応した鍵による認証に切り替えられるよう、クライアントにも呼びかけたいと思います。

OpenSSHがSHA-1を使用したRSA署名を廃止、BacklogのGitで発生した問題と解決にいたるまでの道のり | 株式会社ヌーラボ(Nulab inc.)

OpenSSH 8.3登場、ssh-rsa公開鍵署名アルゴリズムは無効化へ | TECH+(テックプラス)

さて、今回は、macOSをVenturaにアップグレードしたらSSH接続ができなくなった際の解決方法について書いてみました。
いかがだったでしょうか?
読んでくださったあなたの参考に少しでもなれば嬉しいです。
それではまた次回。