【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のメニューから「セキュアトンネリング」を開始。
- コンソール上では「接続済み」と表示される。
- コンソールの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