はじめに
~ NanoPi NEO2 quick launch and remote SSH access over the Internet ~
ラズパイよりも一回り以上ちいさい、とてもかわいいけどパワフルなNanoPi NEO2を開封からちゃちゃっと立ち上げて、remote.itをインストールしてインターネット越しにSSH接続してみます。
NanoPiとは
名前から想像する通り、Raspberry Piライクなシングルボードコンピューターです。小さいけれど豪華、それでいて汎用性の高いハードウェア構成、かつ不要なものは削ぎ落としたシンプルなコンピューターです。
- 本家はこちら: https://www.friendlyarm.com/index.php?route=product/category&path=69
- ハードウェア構成により様々なバージョンあり
- 手に入れやすいのは今回解説する「NanoPi NEO2」、秋月電子で購入可能
- ARMのCPU、公式のOS以外にarmbianをサポート: https://www.armbian.com/nanopi-neo-2/
- microSDカード(class10以上)、USB micro-Bの電源(2A以上の指示)など、ラズパイ用の周辺機器が利用しやすい。
開封、ハードウェアの準備
開封、Micro SDカード、ヒートシンク、電源そしてLANケーブルを準備
-
電源、ラズパイ2Bに使っていた2Aくらいのやつ、USB Micro-B
armbian OSを準備
- まずはイメージファイルをダウンロード:
armbian : https://www.armbian.com/
より、[Download]−[NanoPi NEO 2]を選択。WebページをCtlf+Fで検索すると簡単。
【注意】上記検索で「NanoPi NEO 2 Black」が先にでてきますが間違えないように。
Armbian Busterをダウンロードしてみます。
直リンク: https://www.armbian.com/nanopi-neo-2/
Micro SDカードのフォーマットとOSの書き込み
-
Micro SDカードをフォーマット
なにげによく使う「SD Card Formatter」でMicro SDカードをフォーマット
-
OSの書き込み
armbianのサイトにも書き込みツールが紹介されていますが…今回はラズパイでおなじみ「Raspberry Pi Imager」を使ってみました。
「CHOOSE OS」からメニュー一番下「Use custom」で先ほどダウンロードした「Armbian Buster」を、
「CHOOSE SD Card」から先ほどフォーマットしたMicro SDカードを選択
最後に「WRITE」で書き込み開始
電源投入
前項で準備したMicro SDカードを挿入、有線LANケーブルをHUB、ルーターに接続して電源を接続します。
少し待つとOS起動しDHCPでIPアドレスを取得している、はず。
LANのルーターの管理画面か、もしくは「Fing」などのツールでIPアドレスを確認します。
次は同一LAN上の他のコンピューターからターミナルソフトでSSHアクセスしてみます。
SSHでログイン
ターミナルソフトを起動し、SSHでアクセスします。
同梱の簡易ドキュメントに記載の通り。
- 初期ユーザー名:root
- 初期パスワード:1234
xxx@macbookpro:~ $ ssh -l root 192.168.xxx.xxx
ログインに成功すると以下のようなバナーとrootパスワード設定のプロンプトが表示されます。
_ _ ____ _ _ _ ____
| \ | | _ \(_) | \ | | ___ ___ |___ \
| \| | |_) | | | \| |/ _ \/ _ \ __) |
| |\ | __/| | | |\ | __/ (_) | / __/
|_| \_|_| |_| |_| \_|\___|\___/ |_____|
Welcome to Armbian 20.08.1 Buster with Linux 5.8.5-sunxi64
System load: 0.13 0.15 0.08 Up time: 5 min Local users: 2
Memory usage: 22 % of 475MB IP: 192.168.xxx.xxx
CPU temp: 31°C
Usage of /: 10% of 15G
Last login: Wed Sep 2 19:10:59 2020
New to Armbian? Documentation: https://docs.armbian.com Support: https://forum.armbian.com
New root password:
新しいrootのパスワードを設定、ロケールとキーボードを自動設定するか質問されるので「Y」
続いて新しい一般ユーザー作成を促すプロンプトが表示されるので、好きなユーザー名とパスワードを設定(例:demo)
New root password: ********
Repeat password: ********
Detected timezone: Asia/Tokyo (JST, +0900)
Do you want to set locales and console keyboard automatically from your location [Y/n]
Generating locales: ja_JP.UTF-8
Console keyboard layout: jp
Creating a new user account. Press <Ctrl-C> to abort
Please provide a username (eg. your forename): demo
Creating a new user account. Press <Ctrl-C> to abort
Create password: ********
Repeat password: ********
名前の入力を促されますが、空白で良いでしょう、そのままEnter
Please provide your real name (eg. John Doe):
Dear demo, your account demo has been created and is sudo enabled.
Please use this account for your daily work from now on.
root@nanopineo2:~#
で、コマンドプロンプトが表示され初期設定完了です。
SSH設定の変更
rootでのログインを無効化します。
root@nanopineo2:~# sudo vi /etc/ssh/sshd_config
この行をコピー&編集してコメントアウトし「no」に変更、上書きして保存
# PermitRootLogin yes
PermitRootLogin no
一度リブートして新しいユーザーでログインし直します。
root@nanopineo2:~# shutdown -r now
少し時間をおいて再度SSH接続、今度は新しいユーザー名「demo」で
先ほどの設定でrootユーザーではもうログインできないはずです(確認しておきましょう)
xxx@macbookpro:~ $ ssh -l demo 192.168.xxx.xxx
demo@192.168.1.29's password: xxxxxxxx
_ _ ____ _ _ _ ____
| \ | | _ \(_) | \ | | ___ ___ |___ \
| \| | |_) | | | \| |/ _ \/ _ \ __) |
| |\ | __/| | | |\ | __/ (_) | / __/
|_| \_|_| |_| |_| \_|\___|\___/ |_____|
Welcome to Armbian 20.08.1 Buster with Linux 5.8.6-sunxi64
System load: 0.00 0.00 0.00 Up time: 3 days 15:13
Memory usage: 20 % of 475MB IP: 192.168.xxx.xxx
CPU temp: 40°C
Usage of /: 11% of 15G
Last login: Tue Sep 15 00:28:53 2020 from 192.168.1.183
demo@nanopineo2:~$
無事一般ユーザーでログインできました。
nanopiのアップデート
OSとパッケージのアップデートを確認、適用します。updateで少し、upgradeは結構時間がかかるので、upgradeを流したら少し放置ですね。
demo@nanopineo2:~$ sudo apt update
demo@nanopineo2:~$ sudo apt upgrade
2021.10.19 更新
これ以降の手順を従来のconnectd_installerを使う手順からDevice Packageを使う手順に更新しました。
インターネット越しのSSHアクセス設定(remote.itの導入)
FWのポート公開をせずともインターネット越しに遠隔アクセスできる「remote.it」サービスを設定します。
remote.itのアカウント作成とnanoPiへのインストールを実施します。
remote.itが何か、アカウントの作成方法については以下記事が参考になると思います。
「インターネット世界の「どこでもドア」remote.it」
「ラズパイにRPi-Cam-Web-Interfaceとremote.itで遠隔Web IPカメラ」
「ラズパイにScreenlyとremote.itで遠隔デジタルサイネージ」
「これは魔法か?! インバウンドポートを全閉したAWSのサーバに接続する方法」
「remot3.itでインバウンド全閉じ状態のマシンにインターネット経由でアクセスしてみた」
今回の構成の概略はこんな感じです。
remote.it アカウント作成(① remoteit Cloudで実施)
- アカウントのサインアップ: remote.itホームページから
Get Started
→Sign up
nanoPi へのremote.it インストール(② remoteit ターゲットにソフトウェアをインストール)
- nanoPiへのインストール方法: remote.itホームページから
Download
→Device Packages
See More Options
から他のパッケージを探します。
remote.it Device Package for Pi OS (ARM64)
が今回利用するパッケージ、ラズパイ用ですが大丈夫。
矢印のドキュメントボタンを押して手順を確認します。
Download用のURIをコピー、以下nanoPiのコンソールでcurlコマンドでダウンロードを実行します。
demo@nanopineo2:~$ curl -LkO https://downloads.remote.it/remoteit/v4.13.5/remoteit-4.13.5.arm64.rpi.deb
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 100k 100 100k 0 0 142k 0 --:--:-- --:--:-- --:--:-- 142k
demo@nanopineo2:~$
パッケージ一覧をアップデートし、remoteitパッケージをインストールします。
demo@nanopineo2:~$ sudo apt update -y
demo@nanopineo2:~$ sudo apt install ./remoteit-4.13.5.arm64.rpi.deb
以下のように出力されればインストールは成功です。
.
.
.
.../remoteit-4.13.5.arm64.rpi.deb を展開する準備をしています ...
remoteit (4.13.5) を展開しています...
remoteit (4.13.5) を設定しています ...
Created symlink /etc/systemd/system/multi-user.target.wants/connectd.service → /etc/systemd/system/connectd.service.
--------------------- Claim this device ---------------------
Use the code XXXXXXXX to register this device to your account
--------------------- Claim this device ---------------------
demo@nanopineo2:~$
ターゲットデバイス登録のためのコード(XXXXXXXXの部分)が表示されるのでコピーします。
これは次項のデバイス登録作業で必要になります。
またこのClaim Codeは24時間の期限があるため、続けて事項の作業を進めてください。
nanoPi をターゲットデバイスとして登録(③remoteit Desktop appからの操作)
remoteitパッケージをインストールしたnanoPiをremoteit ターゲットとして動作させるためのデバイス登録作業を行います。この作業によりnanoPiはremoteit ターゲットとなりインターネットを超え遠隔からの接続ができるようになります。
今回はDesktop appを利用しますが、Mobile appも利用可能です。
作業用のPCにremoetit Desktop app をインストール/起動しサインインします。
レジストレーションコードを入力する画面が開きます。nanoPi上での操作の最後で入手したClaim Codeを入力し、REGISTER
をクリックします。
レジストレーションが成功すると下記のようなメッセージが表示されます。
ここではMy Device
という名前でデバイスが登録されました。リスト上に表示されていると思いますので探してみましょう。もし表示されていない場合は矢印部分から再読み込みをしてみてください。
nanoPi 上のデバイス名を編集(③remoteit Desktop appからの操作)
デバイスの詳細画面が表示されます。Edit
からデバイスの名前を編集します。
デバイス名の編集アイコンからお好きなデバイス名に変更可能です。この例では nanopi_JPN_01
とします。
nanoPi 上のサービスを追加(③remoteit Desktop appからの操作)
追加するサービスの編集画面が表示されます。
[SERVICE TYPE]
として[SSH]
を選択し[SAVE]
をクリックします。
続けて再度[+]
をクリックし、nanoPiの状態ダッシュボード「armbian monitor」も追加します。HTTP
を選択し、今度はわかりやすいようにSERVICE NAME
を変更し、さらにSERVICE PORT
を実際のデバイス上での待受ポート番号8888に編集します。
少し待つとサービス一覧画面に追加されたサービスが表示されます。グレーから濃い黒い字に表示変わるとオンライン状態です。もし変化がない場合はリロードしてみてください。
インターネット越しにremote.it経由でSSH接続する
ターゲットデバイスに接続するには、remoteit Web appからプロキシ接続する方法と、remoteit Desktop appを利用してP2P接続する2種類の方法があります。
プロキシ接続の場合
remote.itホームページからSign in
うまく設定できていると以下のようなデバイスがオンラインになっていると思います
デバイス名をクリックすると以下のようなモーダル画面が表示されます
Serviceの部分Secure shell terminal
をクリックし接続情報を取得します
All others
から文字列をコピーしPCのターミナルに貼り付け、この例ではユーザー名をdemo
に変更していよいよ接続してみます。
SSH接続ソフトを利用する場合は取得したホスト名とポート番号をそれぞれ入力してみてください。
xxx@macbookpro:~ $ ssh -l demo proxyXX.xxx.xx -p nnnnn
The authenticity of host '[proxyXX.xxx.xx]:nnnnn ([xxx.xxx.xxx.xxx]:nnnnn)' can't be established.
ECDSA key fingerprint is SHA256:/zzzzzzzzyyyyyyyyxxxxxxxxwwwwwwwwvvvvvvvvvv.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[proxynn.rt3.io]:xxxxx,[aaa.bbb.ccc.ddd]:ppppp' (ECDSA) to the list of known hosts.
demo@proxyXX.xxx.xx's password: xxxxxxxx
_ _ ____ _ _ _ ____
| \ | | _ \(_) | \ | | ___ ___ |___ \
| \| | |_) | | | \| |/ _ \/ _ \ __) |
| |\ | __/| | | |\ | __/ (_) | / __/
|_| \_|_| |_| |_| \_|\___|\___/ |_____|
Welcome to Armbian 20.08.1 Buster with Linux 5.8.6-sunxi64
System load: 0.00 0.00 0.00 Up time: 3 days 16:20
Memory usage: 20 % of 475MB IP: 192.168.xxx.xxx
CPU temp: 42°C
Usage of /: 11% of 15G
[ General system configuration (beta): armbian-config ]
Last login: Tue Sep 15 00:56:34 2020 from xxx.xxx.xxx.xxx
demo@nanopineo2:~$
demo@nanopineo2:~$
demo@nanopineo2:~$
接続できました!
P2P接続の場合
remoteit Desktop app のDevices
に表示されるデバイスから接続したいサービスを選択します。この例では先程同様にSecure shell terminal
(SSH)に接続してみます。サービスを選択し、[ADD TO NETWORK]
をクリックします。
下記表示に変わったら接続の準備完了です。この段階でPC上のremoteit Desktop appはPC上で「待機状態」として接続を待ち受けています。アプリケーションからの実際にアクセスする段階でターゲットへのP2P接続を作成します。
ADDRESS
に表示されている文字列をコピーしPCのターミナルに貼り付け、この例ではユーザー名をdemoに変更していよいよ接続してみます。
SSH接続ソフトを利用する場合は取得したホスト名とポート番号をそれぞれ入力してみてください。初回は下記のような補助ウインドウが表示されます。USERNAME
にnanoPi上のユーザー名を設定しSAVE
します。再度コピーすると文字列内にユーザー名も埋め込まれていると思います。
xxxx:~ xxx$ ssh -l demo nanopi_jpn_01-secure-shell-terminal.at.remote.it -p 30000
The authenticity of host '[nanopi_jpn_01-secure-shell-terminal.at.remote.it]:30000 ([127.0.0.1]:30000)' can't be established.
ECDSA key fingerprint is SHA256:/zzzzzzzzyyyyyyyyxxxxxxxxwwwwwwwwvvvvvvvvvv.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[nanopi_jpn_01-secure-shell-terminal.at.remote.it]:30000' (ECDSA) to the list of known hosts.
demo@nanopi_jpn_01-secure-shell-terminal.at.remote.it's password: xxxxxxxx
_ _ ____ _ _ _ ____
| \ | | _ \(_) | \ | | ___ ___ |___ \
| \| | |_) | | | \| |/ _ \/ _ \ __) |
| |\ | __/| | | |\ | __/ (_) | / __/
|_| \_|_| |_| |_| \_|\___|\___/ |_____|
Welcome to Armbian 20.08.1 Buster with Linux 5.8.6-sunxi64
System load: 0.11 0.04 0.01 Up time: 2:48
Memory usage: 29 % of 475MB Zram usage: 14 % of 237Mb IP: 192.168.xxx.xxx
CPU temp: 33°C
Usage of /: 22% of 15G
Last login: Tue Oct 19 17:56:08 2021 from 127.0.0.1
demo@nanopineo2:~$
demo@nanopineo2:~$
demo@nanopineo2:~$
こちらも接続できました!
まとめ
インターネット越しでもポートを公開せずFW設定も不要、またDHCP運用でどのネットワークに移動してもremote.it経由で接続性を確保できます。携帯電話ネットワーク越しでも接続できますので遠隔地への設置とアクセスを実現できます。nanoPiは元々HDMI出力が無いですのでコンソール接続のためにIPアドレスを固定して運用しがちだと思いますが、remote.itがあればDHCPのまま運用して容易に別ネットワークに移動させる、なんて事も可能だと思います。(でなくともremoteit appsからローカルIPアドレスが見れるのが地味に便利です)