Kinaconの技術ブログ

Ubuntuはじめました。

ラズベリーパイに外部からアクセスする【その3】(rootログイン無効化)

f:id:m-oota-711:20180813114502p:plain

ラズベリーパイに
ssh接続でrootログインできなくします。


以下の雑誌を参考にしました。

日経Linux 2018年 9 月号

日経Linux 2018年 9 月号



実行環境

・Raspberry Pi3 Model B V1.2
 OS: Raspbian GNU/Linux 9.4 (stretch)


作業内容

rootログインの無効化

「/etc/ssh/sshd_config」を編集
sudo nano /etc/ssh/sshd_config
変更箇所

【変更前】
#PermitRootLogin prohibit-password

【変更後】
PermitRootLogin no

※任意のユーザでログインする方法

ラズパイのpiユーザにsudo権限がないので
sudo権限のあるユーザーでログインする必要があった。

#任意のユーザでログイン
su user_name


以上


前にSSH接続の設定を行っております。
kinacon.hatenablog.com



ラズベリーパイに外部からアクセスする【その2】(固定IPアドレス設定)

f:id:m-oota-711:20180813114502p:plain

外部ネットワークからラズパイにアクセスするため、
ルータのグローバルIPアドレスにアクセスして、
ラズパイのプライベートIPアドレスに接続できるようにしなけばいけません。


そのため、ラズパイのプライベートIPアドレス固定IPアドレスにする必要があります。


以下のサイトがとてもわかり易く。参考にさせていただきました。
Raspberry Piに外部ネットワークからアクセスできる様にして携帯でペットを遠隔監視する方法
Raspberry Pi 3 (Raspbian Jessie)の無線LANに固定IPアドレスを設定する



実行環境

・Raspberry Pi3 Model B V1.2
 OS: Raspbian GNU/Linux 9.4 (stretch)


作業内容

ルータの設定を確認

 gatewayを確認する。

 gatewayはルータのIPアドレスです。
 バッファローのルータは192.168.11.1でした。
 参考:無線LAN親機のSSIDと暗号化キー(Wi-Fiパスワード)の確認方法 - アンサー詳細 | BUFFALO バッファロー

dhcpcd.confの編集

コマンド

sudo nano /etc/dhcpcd.conf

編集内容

以下を追記し、再起動する。

interface wlan0
static ip_address=192.168.11.33/24
static routers=192.168.11.1
static domain_name_servers=192.168.11.1

動作確認

ip addr


うまく設定できていました。


f:id:m-oota-711:20180814221921p:plain


以上

ラズベリーパイに外部からアクセスする【その4】(公開鍵認証でSSH接続)

f:id:m-oota-711:20180813114502p:plain

外部ネットワークからラズパイにアクセスするため、
SSH接続をパスワード認証から公開鍵認証に変更します。


公開鍵認証はとてもすぐれたアルゴリズムらしい・・・
詳しくはわかりません。
また、パスワードの入力がいらなくなります。

よって、より安全簡単にラズパイに接続できるようになります。


以下のサイトがとてもわかり易く。参考にさせていただきました。
ツール・ラボ » Raspberry Piに公開鍵認証を使ってssh接続する
SSHサーバに公開鍵をワンライナーで転送する



実行環境

・Raspberry Pi3 Model B V1.2
 OS: Raspbian GNU/Linux 9.4 (stretch)

・PC(Panasonic Let's note CF-SX2)
 OS: Ubuntu 18.04.1 LTS


作業内容

PCで公開鍵と秘密鍵を作成

※UbuntuPCで作業します。

鍵を作成

cd ~/.ssh
ssh-keygen

鍵の確認

公開鍵(id_rsa.pub),秘密鍵(id_rsa
作成時にパスワードを登録します。

ls ~/.ssh

公開鍵をラズベリーパイに保存

公開鍵を転送

ssh-copy-id [ラズパイのユーザー名]@[IPアドレス]

接続確認

先に入力したパスワードを入力する。
ラズパイにログインできればOK

ssh  [ラズパイのユーザー名]@[IPアドレス]

パスワード認証の無効化

※ここはラズパイで作業する。

「/etc/ssh/sshd_config」を編集します。

sudo nano /etc/ssh/sshd_config


■変更前
PasswordAuthentication yes

■変更後
PasswordAuthentication no


sshを再起動する

sudo systemctl restart ssh

???パスワード入力がなくならない

Enter passphrase for key XXXX/.ssh/id_rsa': が出る・・・

解決方法:sudo nano /etc/ssh/sshd_configを修正する

以下をコメントアウトする


# PasswordAuthentication no
# ChallengeResponseAuthentication no


以上


kinacon.hatenablog.com


ラズベリーパイに外部からアクセスする【その1】(wifiパスワードの暗号化)

f:id:m-oota-711:20180813114502p:plain

ラズベリーパイのセットアップが完了し、ローカルPCからアクセスできるようになりました。
次は外部ネットワークからラズパイにアクセスしたいと思います。
まずは、ラズパイのセキュリティーを上げます。

以下のサイトを参考にラズパイのwifipパスワードの暗号化を行いました。
RaspberryPiでWPA-PSKのWiFiに接続する方法


実行環境

・Raspberry Pi3 Model B V1.2
 OS: Raspbian GNU/Linux 9.4 (stretch)

・PC(Panasonic Let's note CF-SX2)
 OS: Ubuntu 18.04.1 LTS

事前準備
 PCからラズベリーパイにSSHで接続する。


作業内容

ラズベリーパイのwpa_supplicantの設定情報を確認

※wpa_supplicantは無線LANアクセスポイントにWPAで接続要求を行うためのコマンド

コマンド

cat /etc/wpa_supplicant/wpa_supplicant.conf

実行結果

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

network={
ssid="XXXX"
psk="XXXX"
key_mgmt=WPA-PSK
}


pskにパスワードが記載されています。
このファイルを覗かれると大変です。


wifiパスワードの暗号化

上記のpskを暗号化します。

コマンド

# wpa_supplicant.confのバックアップファイルを作成する
sudo cp /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf.bk

#  wpa_passphrase SSID 入力、その後PSKを入力するとで暗号化結果が出力される。
wpa_passphrase SSID 

実行結果

# reading passphrase from stdin
PSK
network={
ssid="XXXX"
#psk="XXXX"
psk=c9bc…
}

wpa_supplicant.confの編集

先の暗号化されたPSKをコピーし、psk=に上書きし保存する。

コマンド

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

wpa_supplicant.confの編集

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

network={
ssid="XXXX"
psk=c9b…
key_mgmt=WPA-PSK
}

接続確認

再起動してwifiに接続できるか確認。

ラズベリーパイで実行する。

コマンド

ip addr

wlan0にipアドレスが取得されていればOK。

※念の為、sudo権限がないと読み取れないようにする。
sudo chmod 600 /etc/wpa_supplicant/wpa_supplicant.conf


以上

ラズベリーパイのセットアップ

f:id:m-oota-711:20180813114502p:plain

ラズベリーパイは昔に購入してました。
サーバーを構築しようとして断念してます。

もう一度復活させたいと思います。


私のラズパイはラズベリーパイ3B V1.2です。


ラズベリーパイ3B+が2018/6に発売されたようですね。
使いこなせるようになったら、買おうかな。



とりあえず、マイラズパイを使えるようにしていきます。



準備品

  • Raspberry Pi 3B
  • microSDカード 64GB  :クラスは高いほうが良いらしい
  • マイクロUSB変換アダプタ  :マイクロSDをUSBに変換する 100均でゲット。
  • USB電源アダプター
  • HDMI to VGA 変換アダプター  :HDMI(オス)をDVI(メス)に変換する
  • モニタ  :残念ながら、うちにはTV以外でHDMIモニタがない
  • USBキーボード
  • USBマウス

TOSHIBA microSDXCカード 64GB Class10 UHS-I対応 (最大転送速度48MB/s) 5年保証  (国内正規品) MU-F064GX ラズベリーパイ Raspberry Pi 3モデルB用公式microUSB電源 ACアダプタ 黒 T6142DV ICZI HDMI-VGA(D-SUB)変換アダプタ hdmi 変換 アダプタ ケーブル ブラック 【相性保証付き】/ 1080p対応 HDMI オス to VGA メスアダプタ



作業内容

UbuntuでマイクロSDのフォーマット

「Gparted」をインストール

これで、microSDを初期化できる。
ubuntuソフトウェアでもインストールできる。
/etc/sudoersの修正箇所

sudo apt install gparted

microSDの初期化

 microSDを挿入して、「Gparted」を起動。
 ubuntu18.04の場合は「アプリケーションを表示する」で検索して起動できる。
 ※端末で「gparted」でも起動する。
 f:id:m-oota-711:20180813085051p:plain
 
 
 デバイスをSDに設定する(右上の【/dev/sdb (57.67Gib)】のところ)
 f:id:m-oota-711:20180813085343p:plain
 
 
 パーティションすべてを選択して、右クリックで削除を選択。
 f:id:m-oota-711:20180813085332p:plain


 新規作成で、fat32を設定し作成。
 f:id:m-oota-711:20180813085435p:plain
 
 
 【すべての操作を適用します】を実行。
 f:id:m-oota-711:20180813085454p:plain

OS Raspbianをインストール

NOOBSのZipファイルをダウンロード

Download NOOBS for Raspberry Pi

f:id:m-oota-711:20180813090250p:plain

Zipファイルを展開、中身をmicroSDにコピー

※コピー時に問題が発生
microSDのファイルマネージャーが開けない・・・

以下のサイトを参考にコピーを実行しました。

SDHCカードが認識されない? (Ubuntu 15.04) ( Linux ) - やまものブログ - Yahoo!ブログ

microSDのマウント
sudo mkdir /mnt/sdb1
sudo mount -t vfat /dev/sdb1 /mnt/sdb1
Noobsの中身をコピー
sudo cp ~/NOOBS_v2_8_2/* /mnt/sdb1
sudo  cp -r ~/NOOBS_v2_8_2/* /mnt/sdb1


ディレクトリが3つあり、コピーできなかったので「cp -r」で再実行。
一応、「ls」で中身を確認。

f:id:m-oota-711:20180813094241p:plain

microSDの取り外し
sudo umount /mnt/sdb1/

ラズパイにOSをインストール

※ここからラズパイでの作業になります。


以下のデバイスを接続する。
microSD
・USBキーボード
・USBマウス
・LANケーブル
・モニタ

電源ケーブルを接続するとラズパイは起動します。

インストール作業

1.「Raspbian」をチェック。
2.「Language」を「日本語」に設定。
3.「インストール」をクリック。
4.インストールが完了したら再起動。

ラズベリーパイの初期設定

再起動後、
自動で以下の設定が起動します。
・Password
Wifi
・RaspbianのUpdate ※完了したら再起動します。

日本語フォントと日本語入力ソフトのインストール

sudo apt update
sudo apt upgrade #RaspbianのUpdateしてる場合はいらないです。
sudo apt install ibus-mozc fonts-ipafont fonts-ipaexfont

SSHの有効化

以下のサイトを参考にしました。
Raspberry Pi 3を初回起動してからSSH接続まで

SSHの設定

「メニュー(ラズベリーパイのマーク)」⇒「設定」⇒「Raspberry Piの設定」⇒「インターフェイス
SSH:無効 > 有効

他のPCからの接続方法(SSH接続)

ラズパイのアドレスを「ip addr」or 「ifconfig」で確認しておく。NICはeth0。

※ここはUbuntuPCでの作業になります。

ssh pi@192.168.1.X

piユーザをsudo権限を削除する。

piユーザは初期設定でsudo権限を持っていることは既知です。
これはセキュリティー上問題です。
すでにPASSWORDは変更済みなので、piユーザーはログインできないようにロックします。


以下のサイトを参考にしました。
raspberrypi3に独自のユーザを設定する | Hornet|静岡拠点のWeb、ホームページ制作

sudo権限を有するNewユーザーを作成

※ここはラズパイでの作業になります。

sudo adduser newuser
sudo gpasswd -a newuser sudo
exit
Newユーザーをpiユーザーと同じグループに追加

※ここからはUbuntuPCでの作業になります。

# newuserユーザーでログイン
ssh newuser@192.168.1.X
#piユーザーのグループを確認
groups pi

#newユーザーをpiユーザと同じグループに設定(グループ名の間はスペースではなくカンマに注意)
sudo usermod -G pi,adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio newuser

# 確認
groups newuser

#piユーザーのホームディレクトリをコピー
sudo cp -r /home/pi/* /home/newuser
piユーザをsudoグループから除外
# piユーザーをsudoグループから除外
sudo gpasswd -d pi sudo

# piユーザーをロック
sudo passwd -l pi
piユーザーのパスなし設定を無効化
sudo nano /etc/sudoers.d/010_pi-nopasswd

【010_pi-nopasswdの修正箇所】
#pi ALL=(ALL) NOPASSWD: ALL
※ piをnewuserにするとパスなしで入れる

再起動して完了。

sudo reboot

以上



日経Linux 2018年 9 月号

日経Linux 2018年 9 月号

PC(Ubuntu18.04LTS)でAmazonEcho(AIスピーカー)を動かしてみる。

f:id:m-oota-711:20180812213938p:plain

日経Linux2018/09にラズベリーパイをAIスピーカーにする特集がありました。

まだ、ラズベリーパイはハードルが高い(勝手なイメージかもしれませんが・・・)ので
とりあえずPCで動かしてみようと思いました。


以下の手順でAmazonEchoの開発キットを導入します。

作業内容

1. マイクとスピーカの設定
2. クラウドサービスのAIアシスタント機能の設定
3. PCへの開発キットの導入


1.マイクとスピーカーの設定

スピーカーはPC内蔵をそのまま使用する。
マイクはAmazonで購入しました。

サンワサプライ フラット型PCマイク MM-MC23

サンワサプライ フラット型PCマイク MM-MC23

カード番号を調べる

【参考】Linuxで音声の出力先をUSBスピーカーにする

aplayを使用し、スピーカーのカード番号とデバイス番号を調べた。
番号0でアナログスピーカーはデバイス番号0にあるようだ。

コマンド
aplay -l
結果

f:id:m-oota-711:20180812084948p:plain



【参考】すえん学録: USBマイクとUSBスピーカーでarecord(録音)とaplay(再生)を行う


arecordを使用し、マイクのカード番号とデバイス番号を調べた。
番号0でアナログマイクはデバイス番号0にあるようだ。

コマンド
arecord -l
結果

f:id:m-oota-711:20180812090243p:plain


音量の設定

音量は前にLet'sNoteのスピーカー有効化に使用したAlsamixerを使用しました。
alsamixer起動後 [F5]を押して表示を[全て]にする。
矢印キーで[Mic]へ移動し、バーをMAXにする。
mキーを押して、バーの下の MM を 00 にする。MM はミュート。

マイクのdB ゲインは[Capture]で変更できる。

コマンド
alsamixer
結果

f:id:m-oota-711:20180812092648p:plain


動作確認

スピーカー
speaker-test -D plughw:0,0 -t sine -f 1000

f:id:m-oota-711:20180812094045p:plain


マイク
speaker-test -D plughw:0,0 -t sine -f 1000

f:id:m-oota-711:20180812094958p:plain



2.クラウドサービスのAIアシスタント機能の設定

AIアシスタント機能である「Amazon Alexa」をPCから
「Alexa Voice Service(AVS)」を連携して呼び出します。

※Alexaを呼び出すデバイスを「Alexaデバイス」と呼ぶそうです。よってPCはAlexaデバイスになります。

AVSと連携にはブラウザでAVSにPCの製品情報を登録する必要があります。

AVSにAlexaデバイスを登録する

以下のサイトを参考に行った。
Register a Product | Alexa Voice Service


デベロッパーアカウント作成
※通常のアマゾンアカウントのIDとPASSでログインすると一部情報が引き継がれました。


・製品を作成する

【設定情報】
製品名:適当
製品ID:製品名を記入
製品はアプリやデバイスで使用しますか?:端末
ご使用の端末は、コンパニオンアプリを使用しますか?:いいえ
商品カテゴリー:その他 製品名を記入
製品概要:製品名を記入
エンドユーザーは、商品とどのようにやり取りするのでしょうか?:
タッチで開始される、ハンズフリー
この製品を商品として配信する予定ですか?:いいえ
これは子供向け商品、それ以外は13歳以下の子供向けですか?:いいえ


・プロフィールを新規作成をする

【設定情報】
セキュリティプロファイル名:製品名 Profile
セキュリティプロファイル記述:製品名 Profile


・その後の作業
「その他のデバイスやプラットフォーム」をクリック
「クライアントID名」に製品名を入力し、「一般ID」をクリック
「コピー」をクリックして完了する。

Login with Amazon(LWA)のセキュリティプロファイルを有効化する

開発者コンソールで
1「アプリ&サービス」をクリック
2「Amazonでログイン」をクリック
3「製品名」をクリック
4「Confirm」をクリック
5「http://example.com」と入力
6「Save」をクリック

3.PCへ開発キット導入

PCからAVSを利用できるようにAVS Device SDK(開発キット)をインストールする。

以下のサイトを参考に行った。Ubuntu16.04向けだが18.04でも動いた。

Ubuntu Linux Quick Start Guide · alexa/avs-device-sdk Wiki · GitHub

Alexaの応答を日本語化

1 Alexaを起動
2 [C] + [Enter]
3 [1] + [Enter]
4 [6] + [Enter]

以上です。


「Alexa!」を聞き取ってくれません・・・
スピーカの問題なのか? 原因はわかりません。
ただ、「t」 入力で「Alexa」が聞き取れた状態にして、
天気や時間をきくとちゃんと答えてくれました。

今度はラズベリーパイに入れてみようと思います。


日経Linux 2018年 9 月号

日経Linux 2018年 9 月号

はてなブログを日本語化する。

ずっと気になっていたが、はてなブログのメニューやらなんやらが英語だった。

読めなくはないが、私の脳では一瞬考える時間を要する。

ので、日本語化した。

以下のサイトを参考にFirefoxの設定を一旦英語にして日本語にするだけ。

突然はてなブログが英語になった - やってみる

毎回、ブラウザを落として、再起動しないと設定が反映されませんでした。

以上。