Linux
 Computer >> コンピューター >  >> トラブルシューティング >> Linux

SSH接続エラー「一致する鍵交換メソッドが見つかりません」を解決する2つの方法

リモートサーバーにSSHで接続しようとした際、「no matching key exchange method found(一致する鍵交換メソッドが見つかりません)」というエラーメッセージが表示され、使用すべき暗号化アルゴリズムの候補を提示されることがあります。このエラーが発生すると、リモートサーバーに接続できなくなります。一見厄介な問題に思えますが、実は非常によくあるトラブルで、Unix系ユーザーの間でも頻繁に話題に上り、同じ対処法が繰り返し共有されています。

以下で紹介する修正方法は、SSHが動作するあらゆる環境で検証済みですが、特にUnixやLinuxシステムでこの問題に遭遇しやすい傾向があります。Windowsなどその他の環境でSSHを利用している場合でも、基本的には同じ手順で解決できます。ただし、オプションの指定方法が多少異なる場合がある点にはご注意ください。

方法1:サーバーへの再接続と鍵の再生成

まず最初に、エラーが再現するかどうかを確認しましょう。このエラーメッセージは、リモート側のサービスが一時的に停止しているだけの場合もあり、時間の経過とともに自然に解消されていることがあります。検証時には、ドキュメントで例として推奨されるexample.org宛てに仮想マシンからSSH接続を試みましたが、実際の作業ではご自身の環境に合わせた正しいネットワークアドレスを指定してください。

SSH接続エラー「一致する鍵交換メソッドが見つかりません」を解決する2つの方法

それでもエラーが表示される場合は、コマンドプロンプトからssh-keygen -Aを実行して鍵を再生成してみてください。これにより、SSHアプリケーションがリモートサーバーへの接続に使用するキャッシュが更新されます。それでも解決しない場合は、service ssh restartを実行してSSHサービスを再起動し、少し待ってみましょう。

それでも問題が残る場合は、サーバーとクライアントが使用すべきプロトコルについて合意できなかったことを意味します。OpenSSHは膨大な種類のプロトコルを実装していますが、その一部は安全性が損なわれていることが判明したため、意図的に無効化されています。サーバー側のSSHパッケージをすべて最新版に更新する必要があるため、状況をシステム管理者に伝えましょう。自分自身のサーバーであれば、すぐに更新作業を行ってください。

サーバー側の更新がどうしてもできない場合で、危険性のあるアルゴリズムを使用するリスクを十分に理解した上で対応したいのであれば、クライアント側でこのエラーを回避する方法があります。

方法2:OpenSSHでレガシーオプションを有効にする

エラーメッセージ内の「Their offer:」以降の部分を確認すると、リモートサーバーが優先するアルゴリズムがわかります。多くのシステムでは、古いdiffie-hellman-group1-sha1技術がすでに無効化されているOpenSSH 7が採用されていますが、相手側がOpenSSH 6などの旧バージョンのままである場合、sha1を使うよう指示されます。

クライアント側でこの問題を解決するには、実際のホスト名またはIPアドレスを指定して、次のコマンドを実行します。
ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 testhost@example.org

これで接続できた場合、サーバーは古いsha1ベースのプロトコルを求めていたことになります。この旧方式が無効化されたのには正当な理由がありますが、nanoやvimなどのエディタで~/.ssh/configファイルを開き、以下の行を追加すれば、より恒久的に回避できます。

Host example.org
KexAlgorithms +diffie-hellman-group1-sha1

ここで重要なのは、プラス記号(+)を必ず付けることです。これは、より安全なデフォルト設定を置き換えるのではなく、そこへ追加することを意味します。サーバー側のパッケージが更新されれば、ほとんどの場合は自動的により安全なプロトコルが使用されるようになります。

先ほどのエラーでsha1ではなくssh-dssプロトコルが示されていた場合は、代わりに次のコマンドを試してみてください。
ssh -oHostKeyAlgorithms=+ssh-dss(続けてホスト名を指定)
これで接続に成功したら、~/.ssh/configファイルを再度編集し、Host行の後に以下を追加します。

HostKeyAlgorithms +ssh-dss

sha1と同様に、ssh-dss鍵も深刻なセキュリティ上の問題を抱えているため、すでに非推奨となっています。この設定を使い続けると接続に脆弱性が生じる恐れがあるため、あくまで一時的な回避策と位置づけ、できるだけ早くサーバーを更新することが何よりも重要です。

  1. Microsoft AzureでSSHキーペアを作成し、Ubuntuサーバーに追加する方法

    Azure上の仮想マシンには、資格情報(パスワード)またはSSHを使って接続できます。SSH(Secure Shell)とは、暗号化された接続を通じてホストマシンへリモート接続するためのプロトコルです。スイッチやルーター、VMware、Linuxなど、SSH接続に対応しているあらゆるホストに対して利用可能です。本記事では、SSHキーを作成し、Azureにデプロイした新しいUbuntu Server 18.04 LTSにそのキーを追加する手順を詳しく解説します。SSHは「秘密鍵」と「公開鍵」の2つのキーで構成されています。公開成されています。公開鍵はLinux仮想マシン側に配置し、秘密鍵は接続時

  2. Windows 10 で SSH キーを生成する方法【標準搭載 OpenSSH を活用】

    Windows 環境で SSH キーを生成するには、かつてはサードパーティ製ツールをインストールする必要があり、手順も複雑でした。しかし、Windows 10 April 2018 Update 以降は OpenSSH クライアントが標準で搭載されるようになったため、ssh-keygen コマンドだけで簡単に SSH キーを作成できるようになりました。この記事では、事前確認からキーの生成、実際の接続までの全手順をわかりやすく解説します。 事前準備:OpenSSH クライアントの確認と有効化 まず、お使いの PC に OpenSSH がインストールされていることを確認しましょう。以前のバージョ