Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2810

CLIを使わずにSORACOMのSIM入りデバイスへリモートSSH

$
0
0
はじめに SORACOM Napterは,SIM入りデバイスをインターネットに晒すことなくリモートから接続可能にする便利なサービスですが,Napter経由でリモート接続する際にはその都度ポートマッピングを作成する必要があります。 コンソールから作成することも可能ですが,毎回コンソールにログインして画面操作するのは非常に手間がかかります。そんな時に便利なのが,SORACOMが提供しているAPI。これを使ってスクリプトを書けば,コマンド一つでポートマッピングの作成からリモートデバイスへの接続までできてしまいます。 さらにSORACOM CLIも使えばより簡単にAPIが叩けるんですが,そっちの記事はもうあるので,今回は敢えてCLIを使わないとどうなるのか,お見せしようと思います。 SORACOM Napterをcliから使ってみる - Qiita CLIを入れるかどうか迷ってる方は,是非見比べて参考にしていただければと思います。 前提条件 接続先デバイスに入っているSORACOM SIMに名前が付けられていること スクリプトの実行環境でjqコマンドが使えること コード napter.sh # APIキーとトークンを取得 read API_KEY TOKEN <<(curl -s -X POST -H "Content-Type: application/json" \ -d '{"email": "*****", "password": "*****"}' https://api.soracom.io/v1/auth \ | jq -r "[.apiKey,.token]|@tsv") # 操作したいSIMのIMSIを取得 IMSI=$(curl -s -X GET -H "X-Soracom-API-Key: ${API_KEY}" \ -H "X-Soracom-Token: ${TOKEN}" https://api.soracom.io/v1/subscribers \ | jq -r '.[] | select(.tags.name=="*****") | .imsi') # ポートマッピングを作成 curl -s -X POST -H "Content-Type: application/json" \ -H "X-Soracom-API-Key: ${API_KEY}" -H "X-Soracom-Token: ${TOKEN}" \ -d "{\"destination\": {\"imsi\": ${IMSI}, \"port\": 22}, \"duration\": 28800, \"tlsRequired\": false}" \ https://api.soracom.io/v1/port_mappings # ポートマッピングが作成されていることを確認 echo '' curl -s -X GET -H "X-Soracom-API-Key: ${API_KEY}" -H "X-Soracom-Token: ${TOKEN}" \ https://api.soracom.io/v1/port_mappings | jq ".|length" # NapterのエンドポイントのIPアドレスとポート番号を取得 IFS=: read ADDRESS PORT <<(curl -s -X GET -H "X-Soracom-API-Key: ${API_KEY}" \ -H "X-Soracom-Token: ${TOKEN}" https://api.soracom.io/v1/port_mappings \ | jq -r ".[]|select(.imsi==\"${IMSI}\")|.endpoint") # IFSを元に戻す IFS=$' \t\n' ssh -p $PORT pi@$ADDRESS SORACOMアカウントのメールアドレス,パスワード,SIMの名前,ポートマッピングの有効期限(duration),ラズパイ側のユーザ名などは適宜置き換えてください。 基本的には,curlでAPIを叩いた結果から必要な値をjqで取り出す仕組みになっています。curlの戻り値から必要な値を取り出して変数に格納する方法については,以前書いたこちらの記事をご参照ください。 「cURLで取得したJSONの複数フィールドを別々の変数に格納する」を1行で - Qiita 「ポートマッピングが作成されていることを確認」のところでは,現在有効なポートマッピングの数が表示されます。 環境変数IFSは引数を分割するための区切り文字(デリミタ)で,デフォルトではスペース,タブ,改行になっています。NapterのエンドポイントをAPIで取得すると192.168.0.1:22のような形で返ってくるため,IFSを:に書き換えることによってアドレスとポート番号をreadで別々の変数に格納することができます。 readコマンドで1つの文字列から複数の変数に代入するとき - j3iiifn’s blog ただし,IFSを変更したままだと他のコマンドの挙動に影響してしまうため,用が済んだら忘れずに元に戻す必要があります。 おわりに シェルにちょっとだけ詳しくなりました。あとjqって偉大だなーと思いました。 参考 Getting Started: IoT デバイスに SSH ログインする | SORACOM Napter | SORACOM Users はじめに: API キーと API トークン | SORACOM API 利用ガイド | SORACOM Users リファレンス: SORACOM API リファレンス | SORACOM API 利用ガイド | SORACOM Users jq コマンドを使う日常のご紹介 - Qiita

Viewing all articles
Browse latest Browse all 2810

Trending Articles