Armadilloフォーラム

ATDEとArmadillo-IoT G3のSSH接続について

keiko-502

2023年6月8日 16時10分

Armadillo-IoT ゲートウェイ G3 製品マニュアルの「12.開発の基本的な流れ」に従って検証を行おうとしているのですが,「12.1.2 テスト用サーバーの動作確認」の作業で
server.rbの実行([ATDE ~]$ ruby server.rb -p 8081 -o 0.0.0.0)をしようとすると以下のように表示されマニュアル通りの動作が行えません。
何が原因なのでしょうか。

Traceback (most recent call last):
2: from server.rb:1:in `'
1: from /usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require': cannot load such file -- sinatra (LoadError)

ATDEはATDE8を使用しています。

コメント

sinatraがイントールされていないようです。
12.1.1. テスト用サーバーの実装
で次のコマンドを実行しているとおもいますが、
成功していたでしょうか?

[ATDE]$ sudo gem install sinatra-contrib

もう一度実行した結果のコンソール出力を全て
フォーラムに添付してらえますか?

ご連絡ありがとうございます。
「sudo gem install sinatra-contrib」←のコマンドを再度実行し,
「ruby server.rb -p 8081 -o 0.0.0.0」を実行した画面を添付いたします。

ファイル ファイルの説明
ATDE画面.jpg

> ご連絡ありがとうございます。
> 「sudo gem install sinatra-contrib」←のコマンドを再度実行し,
> 「ruby server.rb -p 8081 -o 0.0.0.0」を実行した画面を添付いたします。

ありがとうございます。表示の通りsinatraのインストールでエラーしていますね。
マニュアルのリリースより後に新しいバージョンのsinatraがでており、
ATDE8のrubyより新しいバージョンのrubyを要求しているようです。
(正確にはsinatraが使っているrack-protectionというgem)

この部分はArmadilloと接続テストするだけのためにATDE側に
立てるサーバーなのでセキュリティリスクは少ないと思いますので、
一旦古いバージョンでインストールしてみてください。

sudo gem install sinatra-contrib -v 2.2.4

マニュアルも更新いたします。

> > ご連絡ありがとうございます。
> > 「sudo gem install sinatra-contrib」←のコマンドを再度実行し,
> > 「ruby server.rb -p 8081 -o 0.0.0.0」を実行した画面を添付いたします。
>
> ありがとうございます。表示の通りsinatraのインストールでエラーしていますね。
> マニュアルのリリースより後に新しいバージョンのsinatraがでており、
> ATDE8のrubyより新しいバージョンのrubyを要求しているようです。
> (正確にはsinatraが使っているrack-protectionというgem)
>
> この部分はArmadilloと接続テストするだけのためにATDE側に
> 立てるサーバーなのでセキュリティリスクは少ないと思いますので、
> 一旦古いバージョンでインストールしてみてください。
>
>

> sudo gem install sinatra-contrib -v 2.2.4
> 

>
> マニュアルも更新いたします。

ありがとうございます。ご提示いただいたコマンドでsinatraをインストールでき,テスト用サーバーも起動できたようなのですが,
Armadilloからテストデータを送信したところ,マニュアルにあるように文字列が表示されなかったため,一度Ctrl+Zでサーバーを止めた後
再度サーバー待ち受けを実行したところ,添付ファイルのような画面が表示されました。
どんな原因が考えられますでしょうか。

ファイル ファイルの説明
ATDE画面_sinatraインストール後.jpg

文字列が表示されなかった事象は置いておいて、
Ctrl+Zはプロセスの終了ではなく、一時停止です。

まだ起動したserver.rbがポートを掴んだまま生きているので、
fgで一時停止しているバックグラウンドプロセスを戻して、
Ctrl+Cで終了してください。

$ fg
#これでプロセスがフォアグラウンドに戻るので Ctrl+C

armadilloからcurlしてメッセージが出なかったとのことですが、
ArmadilloからATDEにpingは届きますか?
届かなければネットワーク設定をみなおしてみてください。

$ ping ATDEのIPアドレス

pingが通ったら改めてserver.rbを実行してみてください。
プロセスの強制終了はCtrl+Cです。

server.rbの停止,起動はできましたが,Armadilloからcurlしてもメッセージが出ません。
ping を試したところ,pingが通らなかったので,ネットワーク設定に問題があるものと思いますが,
ATDE側で何か設定しなければならない項目があるのでしょうか。

> server.rbの停止,起動はできましたが,Armadilloからcurlしてもメッセージが出ません。
> ping を試したところ,pingが通らなかったので,ネットワーク設定に問題があるものと思いますが,
> ATDE側で何か設定しなければならない項目があるのでしょうか。

ATDEとArmadilloは同一のLANに接続しているでしょうか?
ATDEのIPアドレスとArmadilloのIPアドレスは同じアドレス空間か確認できますか?

ATDE、ArmadilloのどちらでもIPアドレスは次のコマンドで確認することができます。

$ ip addr list 

また、WLANで繋いでいる場合APの仕様によっては、子機間での通信を禁止しているルーターも
あるので、もしそういった製品であれば設定を確認してみてください。

> ATDEとArmadilloは同一のLANに接続しているでしょうか?
ArmadilloはLTE回線に接続しています。ATDEは特に設定などしていないので,動作させているPCが接続している無線LANに接続しているものと考えていたのですが
別に設定が必要なのでしょうか。

> ATDEのIPアドレスとArmadilloのIPアドレスは同じアドレス空間か確認できますか?
IPアドレスを確認しましたが,同じアドレス空間にはないようです。

ATDEとArmadilloの通信は同一のLANおよびアドレス空間でないとできないのでしょうか。

> > ATDEのIPアドレスとArmadilloのIPアドレスは同じアドレス空間か確認できますか?
> IPアドレスを確認しましたが,同じアドレス空間にはないようです。
>
> ATDEとArmadilloの通信は同一のLANおよびアドレス空間でないとできないのでしょうか。

できません。

LTE回線が特殊な契約でない限り接続する先はインターネットですが、
インターネット上からグローバルアクセス可能なIPをATDEに割り振るように
ネットワークを構築していない限り、サーバーであるATDEへArmadilloが
LTE経由ではアクセスすることは不可能です。

LTEからATDEへパブリックにIPアクセスが可能である状態というのは、
ATDEがインターネット上に公開されているサーバーになっている状態
ですが、それはこのマニュアルで想定している環境ではありません。

もしインターネット上に公開しているサーバー(適切にNW設定した
AWS EC2ノード等)でsintatraを動かせば、LTEからアクセスできる
と思いますが、インターネット上で実験するには余りにシンプル
過ぎるので、接続元IPの制限くらいはしたほうが良いと思います。

ちなみに、マニュアルのこの手順はあくまで体験的なHowtoですが、
実際にはどのようなシステムを構築したいでしょうか。

同一のLANでなければ接続できないとのことで承知しました。
取り急ぎ,Armadilloを無線LANに接続し,マニュアルに記載のテストデータの送信を確認できました。

ご対応いただきありがとうございました。

> 実際にはどのようなシステムを構築したいでしょうか。
Armadillo-IoT G3が認証機器になっていることから,SORACOMのサービスを使用し,Armadilloおよび配下の機器のデータを取得,管理する
システムの構築を検証していたところで,SSHを使用したサービスを活用するため,まずはSSHについて使用方法などを確認するため今回のマニュアルを
参考にSSHの挙動などを確認していたところでした。

> Armadillo-IoT G3が認証機器になっていることから,SORACOMのサービスを使用し,Armadilloおよび配下の機器のデータを取得,管理する
> システムの構築を検証していたところで,SSHを使用したサービスを活用するため,まずはSSHについて使用方法などを確認するため今回のマニュアルを
> 参考にSSHの挙動などを確認していたところでした。

なるほど、おそらくNapterを使うと思います。
その場合はサーバーがArmadilloになりますが、LTE側回線でグローバルIPをインターネット上で
持つことになるので直接アクセスできますね。

Armadilloでserver.rbを起動してnapterでIPを取得して、
そのIPへATDE等でcurlすると、インターネット上でIPが
直接見える状態になるので、ATDEからアクセスできます。

が、server.rbの動作確認なんてしなくても、目的通り
SSHすれば良いと思います。

単純にArmadilloでsshdを起動すると良いです。
https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_pro…
これでArmadilloがssh"サーバー"になるので、napter等でLTEのIPアドレスが
インターネット側から直接見れる状態に設定すれば、
インターネットに接続したPCから、そのArmadilloのLTE側に割り振ったIPへ
SSH経由でログイン出来る状態になります。

逆に、Armadilloからインターネット上に存在しているSSHサーバーに
アクセスするのであれば、napterは不要で単にArmadilloのLTE回線
経由でsshクライアントからアクセスすることができます。
(sshコマンドを使うだけです、こちらはデフォルトでインストールされています)

ArmadilloがSSHサーバーなのかクライアントなのかによって、
作業が違いますが、sshのテストの前にserver.rbを使う意味はあまりないと思います。

ありがとうございます。
ご想像のとおり,Napterを使用する予定です。

ご提示いただいた方法やマニュアルのページを参考にさせていただきたいと思います。

ご対応いただきありがとうございました。