LoginSignup
7
0

More than 3 years have passed since last update.

NervesのSSH環境を整えた 〜upload.shを使ってファームウェア更新も〜

Last updated at Posted at 2019-12-24

NervesでSSHを利用する場合の日本語の情報がほとんどありませんよね。なければ自分で作るということでSSHの環境をまとめてみたいと思います。

これは「Nervesのネットワーク環境を整えた」の続編になります。

追記(2020.01.21)

ネットワークやSSHの設定はconfigディレクトリにあるconfig.exstarget.exsどちらに記述しても問題なさそうです(記述方法も同じ)。今回はconfig/config.exsに記載することとします。

config/
  config.exs  ←今回はこちらに設定を記述
  target.exs

環境

  • RaspberryPi 3
  • Nerves

わかること

このようなことがわかります。
ですが、SSHで利用する公開鍵と秘密鍵の理解は必要です。
公開鍵暗号 - Wikipedia

  • NervesのデフォルトSSHログインユーザがわかる
  • Nervesに複数ログインアカウントを作成できる
  • Nervesに登録しているSSH公開鍵の調べ方がわかる

やらないこと

nerves.localとUSBでの接続はパスします。
ラズパイ環境ではないですが、 @takasehideki さんのElixirでIoT#4.2:BeagleBone GreenでNerves/Elixirを動かす - VirtualEthernet越しにssh接続でIEx起動&ファームも更新する! にBeagleBoneを使ったUSBでの接続方法があるのでnerves.localを使う場合はこちらを参考にしてくださいm(_ _)m

SSH公開鍵を登録する

NervesのファームウェアをSDカードに焼く場合、以下の手順で実行します。
この時mix firmwareする時にSSH鍵を登録しています。

bash
$ mix deps.get
$ mix firmware

$ mix firmware.burn ←手元のPCでSDカードを焼いてファームウェアを更新する場合
or
$ mix firmware.gen.script ←upload.shを作成するコマンド(初回のみ)
$ ./upload.sh NervesのIPアドレス ←ネットワーク経由でファームウェアを更新する場合

デフォルトの動作

実行ユーザの$HOME/.ssh/id_rsa.pubまたは$HOME/.ssh/id_ecdsa.pubを自動登録しています。$HOME/.sshディレクトリが無い場合はエラーとなります。

デフォルトの動作じゃなくしたい場合

デフォルトの動作じゃなくしたい場合ははじめにmix.exsに以下の設定を追記します。

Nervesのネットワーク環境を整えたで書いた:nerves_networkの場合と同じく、targets: @all_targetsがないとMacの環境でも構築しようとしてしまうようでmix deps.getした時にエラーが出ます。

mix.exs
 defp deps do
    [
      (略)
      # 追加
      {:nerves_network, "~> 0.5", targets: @all_targets},
      {:nerves_firmware_ssh, "~> 0.3", targets: @all_targets} ←今回追記した行
    ]
  end

そして、Aさんの秘密鍵A(例えば$HOME/.ssh/id_rsa.pubの内容)を使ってログインする場合はconfig/config.exsに以下の設定を追記します。

config/config.exs
#
# ssh公開鍵登録
#
config :nerves_firmware_ssh,
  authorized_keys: [
    "公開鍵A"
  ]

この状態でSDカードのファームウェアを更新し、NervesにSSHできるかどうか確認します。

bash
$ mix deps.get
$ mix firmaware
$ mix firmware.burn

$ ssh NervesのIPアドレス ←秘密鍵Aを指定しない場合
$ ssh -i 秘密鍵A IPアドレス ←秘密鍵Aを指定する場合

複数の鍵を登録する場合

例えば、Aさんの秘密鍵AとBさんの秘密鍵Bでログインできるようにする場合はconfig/config.exsに公開鍵Aと公開鍵Bをリスト形式で記述します。1つのNervesに複数PCからの同時ログインもOKということが分かりました。

config/config.exs
#
# ssh公開鍵登録
#
config :nerves_firmware_ssh,
  authorized_keys: [
    "公開鍵A",
    "公開鍵B"
  ]

登録しているSSH公開鍵の確認方法

Nervesにログイン後、以下のコマンドで登録されている公開鍵を確認できます。

iex
iex> Application.get_env(:nerves_firmware_ssh, :authorized_keys)
or
iex> Application.get_all_env(:nerves_firmware_ssh)

まとめ

NervesのSSH環境について整理することができました。
やってみると分かるんですが、upload.shを使ったネットワーク越しのファームウェア更新がかなり便利です!
たま〜にかえってこなくなる場合があるのはなんでかなぁー。

参考URL

nerves-project/nerves_firmware_ssh - Installation

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0