目次
はじめに
こんにちは、5G & IoT部/IoTサービス部門のIoT Connect Gateway (ICGW)サービス開発チームの岩田です。 我々のチームでは日頃からインキュベーション開発というものに取り組んでおります。 インキュベーション開発では、近い将来の需要や新規分野への展開を見据えた機能を実証実験的に開発し、実際に需要が上がった際に迅速に機能を商用展開することを目的としています。
本記事では、インキュベーション開発として実装されて機能の1つであるSSH一括実行機能を紹介します。
開発背景
ICGWでは2022年12月からリモートアクセスという機能の提供を開始しました。
リモートアクセス機能では、お客様の必要な時にセキュアなリモートアクセス用の経路をオンデマンドで提供します。 この機能を活用することで、お客様拠点や外出先から遠隔地の各デバイスにアクセスし、遠隔監視や設定変更などのメンテナンスを行うことができます。
ICGWを利用可能なSIMを装着したデバイスであれば、デバイス側に特別な設定をする必要はなく、SSH接続を含めた任意のデバイスポートにアクセスできます。 また、リモートアクセス経路を作成する際に、デバイスへアクセス可能なソースIPを制限できるのでセキュアな経路を確保できます。 利用料金に関しては、使用した月にのみ料金が発生する課金方式をとっているため、必要な時にだけ最低限のコストでご利用いただけます。
リモートアクセス機能をさらに活用していく上で「あるデバイスでの設定変更やアップデートを他のデバイスにも同様に行いたい」というケースが想定できます。 例えば、各デバイスに蓄積されたログファイルを定期的に一括で取得したい・該当のモジュールやファームを一括で更新したい・最新の設定ファイルを各デバイスに配布したい、といったケースが考えられます。 デバイスの数が少ないうちは運用者が逐一接続して作業できますが、デバイスが増えるほど困難を伴います。
この課題を解決するために開発された機能がSSH一括実行機能になります。
機能紹介
SSH一括実行機能は「特定のデバイスグループに対してSSH接続し、ユーザ定義したスクリプトを実行する機能」です。 利用の流れは以下のようになります。
- SSHグループの設定
- 手動でSSH一括実行をトリガー
- リザルト画面で結果を確認
ステップ1では、一括実行対象のSIMや実行するスクリプトを登録します。 SSH接続では鍵認証方式を利用するため、鍵情報やログインユーザなどのセットアップも行います。 ステップ3では、実際にデバイス上で実行されたコマンドの結果をリザルト画面から確認できます。ログテキストやexitコードといった詳細情報を提供しています。
実際に使ってみた
今回は「各デバイスに蓄積されたファイルを一括でAmazon S3に送信する」というケースを例にとって、SSH一括実行機能を紹介します。
- ユーザがSSH一括実行機能をトリガー
- ICGWが各デバイスに対してSSH接続しコマンドを実行
- デバイスからICGWに対してストレージ機能を使いファイルを送信
- 送信されたファイルをAmazon S3へ転送
図3のフローを実装することを目標にセットアップをしていきます。
デバイスとして、Aterm MR10LN とRaspberry Piをそれぞれ2セット用意しました。 AtermにはIoT Connect Mobile Type SのSIMを挿入してあります。
ストレージ転送機能のセットアップ
まず、デバイスからAmazon S3へデータを送信するためのセットアップを行います(図3のステップ3-4)。 デバイスから直接Amazon S3へデータを送信することも可能ですが、今回はデータの暗号化やクラウド接続をサポートできるICGWのストレージ転送機能を利用します。 ストレージ転送機能の詳細に関しては過去の記事で取り扱っておりますので、そちらもご参照ください。
ストレージ転送機能の設定画面では、ICGW側のデータの受け口であるエントリーポイント
やデータの転送先である宛先設定
、付与するデータを設定する必要があります。
今回はICGWのポータルから図6のように設定しました。
ポイントとしては宛先設定のファイルパスを$YYYY-$MM-$DD/$imsi/log.txt
とすることで、データ送信時にICGW側で自動的に日時やSIMの固有識別子であるIMSI(International Mobile Subscriber Identity)を埋め込んでくれるようにしています。
そのため、各デバイスから同一のコマンドでファイルを送信しても、Amazon S3上でファイル名が重複しないように転送できます。
デバイスからのファイル送信コマンドとして、以下のコマンドを実行します(ICGWのエントリーポイントはこちらをご参照ください)。
curl -v -X PUT --data-binary @./Documents/test/ssh/sample_log.txt http://***:8081/S3_ssh
SSH一括実行機能のセットアップ
次に、ICGWからデバイスへSSH接続するためのセットアップを行います(図3のステップ2)。
以下のコマンドで、raspberry-pi-zero
という名前の公開鍵認証用キーペアの作成し、その公開鍵をRaspberry Piへ転送します。
# キーペア作成 ssh-keygen -t rsa -b 4096 -f raspberry-pi-zero # 公開鍵転送 ssh-copy-id -i ~/.ssh/raspberry-pi-zero.pub user@raspberrypi.local
鍵の準備ができたのちに、ICGWのポータル上でSSH一括実行機能の設定をします。
Secret Key
には先ほど作成したキーペアの秘密鍵を、Command
にはストレージ転送機能のセットアップで使用したコマンドをそれぞれ登録します。
今回は2デバイスを対象に実行するので、SIMs
には該当の2SIMを登録しています。
SSH一括実行機能の動作確認
一通りの設定を終えたので、実際にSSH一括実行機能の動作を確認します。
図8のEXECUTE
から手動でトリガーします。
実行が終わったのちに、ICGWのポータル上から各デバイスに対するコマンドの実行ログを確認できます。
図9ではStatus
やExit Code
が表示されていますが、さらに各IMSIを選択することで図10のような詳細な実行ログテキストも確認できます。
ポータル上のログからSSH一括実行機能が問題なく動作していることがわかったので、Amazon S3にファイルが送信されているか確認します。 図11のように日付のフォルダが作成され、その中にIMSI毎のフォルダも作成されました。図12からIMSIのフォルダにはデバイスから送信されたファイルが格納されていることも確認できました。
以上で、SSH一括実行機能を活用した「各デバイスに蓄積されたファイルをAmazon S3に一括で送信する」ケースの実装および動作確認を行うことができました。
おわりに
今回はインキュベーション開発物である、SSH一括実行機能を紹介しました。 まだインキュベーション段階ということもあり、本機能は必要最低限のものとなっております。 さらなる機能追加として、定期的に実行できるようなスケジュール機能、デバイスに応じたコマンドを実行できるようなプレースホルダ機能などを検討しております。
皆様の反響次第では近い将来に商用展開できるかも(?)しれないので、ぜひお声をいただけると嬉しいです!
本記事を通して、ICGWに興味を持っていただけたら幸いです!
ICGWに関するお問い合わせ先
- IoT Connect Gatewayサービス詳細
- ICGWに関するお問い合わせ先
トライアル、サービス導入に関するお問い合わせ
開発チームへのお問い合わせ(お手数ですが@を半角文字に置き換えてください)