【AWS Greengrass】Raspberry Pi OSでSecure TunnelingのSSHが繋がらない時の対処法

に公開

概要

AWS IoT Greengrass V2の便利な機能である「セキュアトンネリング(Secure Tunneling)」を使おうとした際、AWSコンソール上では接続できているように見えるのに、ターミナル画面がローディングのまま進まない現象に遭遇しました。

調査の結果、OS側のSSHサーバー(sshd)のセキュリティ強化による「鍵交換アルゴリズムの不一致」が原因でした。ログの追い方から解決策までを共有します。

環境

  • Device: Raspberry Pi 5
  • OS: Raspberry Pi OS 64-bit (2025-11-24 Release) ※現時点で最新版
  • Middleware: AWS IoT Greengrass V2
  • Component: aws.greengrass.SecureTunneling

事象

AWSマネジメントコンソールの「MQTTテストクライアント」やGreengrassのメニューから「セキュアトンネリング」を開始。

  1. コンソール上では「接続済み」と表示される。
  2. コンソールのShell画面は ローディングアイコンが回り続けるだけで、プロンプトが表示されない。

調査プロセス

1. Greengrassコンポーネントのログ確認

まずはGreengrass側のログを確認しました。

sudo tail -f /greengrass/v2/logs/aws.greengrass.SecureTunneling.log

ログには以下のような警告が出ていました。

[WARN] {FileUtils.cpp}: Permissions to given file/dir path '/tmp/' is not set to recommended value...
[WARN] {Config.cpp}: Path replace_with_root_ca_file_location to RootCA is invalid.

当初はこれらが原因かと思われましたが、調査の結果、以下が判明しました。

  • /tmpの権限: 777(誰でも書き込める)に対する「緩すぎる」という警告であり、書き込み自体はできているため動作に支障はない。
  • RootCA: 証明書設定のエラーが出ているが、lsof コマンド等で確認するとAWSへのHTTPSコネクション(443ポート)は ESTABLISHED になっており、トンネル自体は張れている。フォーラムでもこのメッセージが出力されてもSSH接続できているとのことだった。

2. SSHサーバー(sshd)のログ確認(解決の糸口)

「トンネルはAWSまで張れているのに、SSHの画面が出ない」ということは、デバイス内部での「トンネル出口」から「SSHポート(22)」への接続でコケているのではないか?と推測し、sshdのステータスを確認しました。

sudo systemctl status ssh

すると、以下のようなエラーが大量に出力されていました。

Nov 30 21:14:36 rpi-c98d00 sshd-session[4169]: Unable to negotiate with 127.0.0.1 port 47884: no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1...

原因:鍵交換アルゴリズムの不一致

エラーメッセージ no matching key exchange method found が決定的な証拠です。

  • Secure Tunnelingコンポーネント: 少し古い鍵交換アルゴリズム(diffie-hellman-group-exchange-sha256 等)を使ってlocalhostのSSHに接続しようとしている。
  • 最新のRaspberry Pi OS(サーバー役): セキュリティ強化のため、古いアルゴリズムをデフォルトで無効化している。

この不一致により、TCP接続はできてもSSHのハンドシェイク(ネゴシエーション)で拒否されていました。

解決策

/etc/ssh/sshd_config を編集し、Greengrassが使用するアルゴリズムを明示的に許可します。

1. 設定ファイルの編集

sudo nano /etc/ssh/sshd_config

ファイルの末尾に以下の行を追加します。既存の設定を上書きしないよう、+ を付けてリストに追加する形式にします。

# AWS Greengrass Secure Tunnelingのための互換性設定
KexAlgorithms +diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1
HostKeyAlgorithms +ssh-rsa

2. SSHDの再起動

設定を反映させます。

sudo systemctl restart ssh

これで再度AWSコンソールから接続を試したところ、無事にSSHログイン画面が表示されました!

まとめ

最新のOSを使う場合、AWSの提供するコンポーネント(特にJavaベースや古いライブラリを使っているもの)とOSのセキュリティポリシーが乖離することがあります。

「繋がらない」となった時は、クライアント側(Greengrassログ)だけでなく、**受け入れ側(今回の場合はsshdログ)**を見ることで、真の原因にたどり着くことができました。

Discussion