【Raspberry Pi 】TeraTermアクセスをSSH公開鍵方式で行う
セキュリティ向上のため、SSHアクセスを公開鍵方式に変更します。
1.公開鍵、秘密鍵の作成
公開鍵はTeraTermで作ります。sshdで作れるらしいけど、CUIで面倒なので。
メニューから「設定」→「SSH鍵生成」
パスフレーズを入れます。無論長くて複雑であればあるほどいい。
パスフレーズを入れたら、公開鍵をまず作ります。
→id_rsa.pubというファイルが作られるので、ローカルの適当なところに置きます。
秘密鍵も作ります。
→id_rsaというファイルが作られるので、これもローカルの適当なところに置きます。
2.サーバへの公開鍵の設置
作成した公開鍵(id_rsa.pub)をサーバに転送します。転送方法はWinSCPを使うなり、Teratermの設定から「ファイル」→「SSH SCP」から実施するなり。
公開鍵をホームディレクトリの.ssh配下に置きます(名前もauthorized_keysに変更)。
ホームディレクトリ配下に.sshがあるかはls -laコマンドでわかります。なければ作成した上で.ssh配下に置きます。
$ls -la
$mkdir .ssh
※2017/2/19追記
なお、公開鍵の権限は600にしないといけないらしい
3.sshdの設定ファイルを変更
以下のように変更します。
$ sudo vi /etc/ssh/sshd_config
RSAAuthentication yes ←コメントアウトされていたら解除
→上記項目は削除されたため、対応は不要(2022/7/3追記)
PubkeyAuthentication yes ←コメントアウトされていたら解除して「yes」
AuthorizedKeysFile %h/.ssh/authorized_keys ←コメントアウト解除して、keyの場所を指定
#PasswordAuthentication yes ←パスワード認証ログインの有効/無効のパラメータ
↓ コメントアウトを解除し、かつnoに変更
PasswordAuthentication no
この後、一度再起動します。
$sudo shutdown -r now
ログインメニューの変更を実施し、保存しておきます。
メニューから「設定」→「SSH認証」
秘密鍵は1の手順で作ったものを指定します。
入力が完了し、OKを押したあとは、設定変更を忘れずに。
メニュー「設定」→「設定の保存」
あとは、ログイン時にパスフレーズを入れれば公開鍵方式でログインできるようになります。
【Raspberry Pi】Vimで開くときに色を付ける
ラズパイはデフォルトではVi(Vim)でファイルを開いても色がついていません。シェルスクリプト編集がしやすくなるように変更します。
そもそもvimがインストールされていない可能性があるため、まずはインストールします。
$ sudo apt-get install vim
Vimの設定ファイルは以下にありますが、syntax onのコメントアウトを解除します。
$ sudo vi /etc/vim/vimrc
"syntax on
↓
syntax on
ユーザ毎で独自にしたい場合は、ユーザローカルにコピーしてから弄ります。
$ sudo cp /etc/vim/vimrc ~/.vimrc
$ sudo vi ~/.vimrc
【Raspberry Pi】ユーザの追加とそのユーザにsudo実施できるようにする
デフォルトのpiユーザ以外を使いたいので、ユーザ追加をします。
1.ユーザの作成とsudo権限の付与
$sudo adduser hogehoge
ユーザー `hogehoge' を追加しています...
新しいグループ `hogehoge' (1001) を追加しています...
新しいユーザー `hogehoge' (1001) をグループ `hogehoge' に追加しています...
ホームディレクトリ `/home/hogehoge' を作成しています...
`/etc/skel' からファイルをコピーしています...新しい UNIX パスワードを入力してください:(パスワードを入力)
新しい UNIX パスワードを再入力してください:(もう一回入力)
passwd: password updated successfully
Changing the user information for hogehoge
Enter the new value, or press ENTER for the default
Full Name :(特に入力する必要がなければそのままEnter)
Room Number :(同上)
Work Phone :(同上)
Home Phone :(同上)
Other []:(同上)
以上で正しいですか? [Y/n] y
ついでにsudoできるようにグループに追加します。
$ sudo gpasswd -a hogehoge sudo
ユーザhogehogeをグループ sudo に追加
また、プロンプトを日本語にする場合は以下のように設定
$ cd ~/
$ vi .profile
export LANG=ja_JP.UTF-8 ←これを追加
2.sudo権限の削除とユーザ削除
sudo権限を削除する場合は以下のとおり
$ sudo gpasswd -d hogehoge sudo
ユーザ hogehoge をグループ sudo から削除
また、既存のユーザでパスワードなしのsudoを実施させない場合は、以下のようにします(例として、piの設定を変更します)。
$ sudo vi /etc/sudoers
pi ALL=(ALL) NOPASSWD: ALL
↓コメントアウト
#pi ALL=(ALL) NOPASSWD: ALL
ユーザの削除は以下のとおり。
ホームディレクトリも削除する場合は、オプション-rを付与する。
$ id -a hogehoge
uid=1001(hogehoge) gid=1001(hogehoge) groups=1001(hogehoge)
$ sudo userdel -r hogehoge
$ id -a hogehoge
id: hogehoge: no such user
【Raspberry Pi】SoftEtherでVPN
「Raspberry Pi Model B+」を買いました。
SoftEtherについては、以前LIVAでインストールしたまま放置してましたが、このラズパイに再度インストールした上でVPNを実現します。
Raspberry Pi でSoftEther VPN 1.0 RC2を試す | よもやま雑記帳
を参考にさせていただきました。
なお、今回はwgetによるダウンロードではなく、直接HPからダウンロードしています。ラズパイの場合はSofEtherはOS: Linux、CPU: ARM EABI (32bit)を選択します。
※セッティング方法を書こうと思いましたが、上記参考サイトとまるっきり同じなので割愛(手抜き)
注意点①
VPNサーバにするラズパイはLinuxルータを通したローカルネットワークの中で動作しています。
なので、Linuxルータのiptablesの設定でVPNアクセスを転送してあげなければなりません。というわけで、iptablesを設定するシェルスクリプトの記載を抜粋すると
WAN='ppp0' # 外部インタフェース
#-------------------------#
# VPN接続からの接続を許可 #
#-------------------------#$IPTABLES -t nat -A PREROUTING -i $WAN -p tcp --dport 443 -j DNAT --to 192.168.0.81:443
$IPTABLES -t nat -A PREROUTING -i $WAN -p udp --dport 500 -j DNAT --to 192.168.0.81:500
$IPTABLES -t nat -A PREROUTING -i $WAN -p udp --dport 1701 -j DNAT --to 192.168.0.81:1701
$IPTABLES -t nat -A PREROUTING -i $WAN -p udp --dport 4500 -j DNAT --to 192.168.0.81:4500
$IPTABLES -A FORWARD -i $WAN -p tcp --dport 443 -d 192.168.0.81 -s xxx.xxx.0.0/16 -j ACCEPT
$IPTABLES -A FORWARD -i $WAN -p udp --dport 500 -d 192.168.0.81 -s xxx.xxx.0.0/16 -j ACCEPT
$IPTABLES -A FORWARD -i $WAN -p udp --dport 1701 -d 192.168.0.81 -s xxx.xxx.0.0/16 -j ACCEPT
$IPTABLES -A FORWARD -i $WAN -p udp --dport 4500 -d 192.168.0.81 -s xxxx.xxx.0.0/16 -j ACCEPT
PREROUTINGでルータで受け取った443ポート等の通信を192.168.0.81(ラズパイのIPアドレス)に透過させるようにします。
ただし、PREROUTINGの後に動作するFORWARDの記載では、-sオプションで特定のIPアドレス帯域からの通信のみを許容するようにしてアクセス制限をします。
私の場合は格安SIMを入れたAndroidからVPNを貼りたいため、SIMを提供している会社が払い出すIPアドレス帯域を事前に調べ、その帯域のみからアクセスを許容する形にしています。フルオープンは危険なのでやめましょう。
ちなみにiptablesは送信元をドメイン指定することも可能なので、いずれはAndroidでDynamicDNSクライアントでドメイン自動更新→そのドメインのみのアクセスを許容、という形を取る予定です。
注意点②
iptablesの設定が完了してもアクセス出来ない場合。
SoftEtherのログ(security_log/VPN/sec_2014xxxx.log)で「VPNクライアントの IP アドレスがまだ決定されていないにもかかわらず、VPNクライアントが通信を行おうとしました」とでていたら、仮想DHCPを設定しないとダメらしいです。
警告が出るけど気にしない
SecureNATの設定に入り、仮想DHCPサーバの設定にチェック
【追記】
ちなみに、この状態だと、ラズパイ自身が自分をネットワーク上で認識する事ができないので、以下のサイトを参考に設定を変更する必要がある。
SoftEther VPN 1.0 RC2でtapデバイスを試す | よもやま雑記帳
※2017/7/8追記
上記サイトのtapデバイス設定ですが、Raspbianのバージョンが上がったことでIPアドレスの設定先そのものが変わりました。
/etc/network/interfacesから/etc/dhcpcd.confです。
従来通りに/etc/network/interfacesで設定する必要がある場合は、/etc/dhcpcd.confの設定内容を変更します(コメントアウトするだけ)
$sudo vi /etc/dhcpcd.conf
#interface eth0
#static ip_address=192.168.11.xx/24
#static routers=192.168.11.xx
#static domain_name_servers=xxx.xxx.xxx.xxx
その後、/etc/network/interfacesの設定を変えます。
$sudo vi /etc/network/interfaces
auto eth0
auto br0
iface br0 inet static
address 192.168.11.xx
netmask 255.255.255.0
network 192.168.11.0
broadcast 192.168.11.255
gateway 192.168.11.xx
bridge_ports eth0
bridge_maxwait 10
自動実行の設定方法もこちらで
$sudo vi /etc/systemd/system/vpnserver.service
[Unit]
Description=SoftEther VPN Server
After=network.target network-online.target[Service]
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
Type=forking
RestartSec=3s[Install]
WantedBy=multi-user.target
サービスの読み込みと自動実行化
$sudo systemctl daemon-reload
$sudo systemctl enable vpnserver.service
【LIVA】【Ubuntu server14.04】Juliusを使いたい(Juliusセッティング完了編)
~前回のあらすじ~
JuliusをセットアップしたらOSSとしてセットアップされたためにいろいろ頑張ったけどダメだったよ。
1.configureでALSAを指定してみる
そもそもOSSとしてではなくALSAで実行できればいいのではないかと、原点に立ち戻ります。Juliusのオンラインマニュアルを見ると「 --with-mictype=」で変更が可能の模様。
$ ./configure --with-mictype=alsa
(略)
configure: error: no ALSA header!
configure: error: ./configure failed for libsent
ダメでした・・・。
色々探ってみると、海外の掲示板にて同様の状態になっている書き込みを発見し、
「HAHAHA,俺もHPから落としたソースコードからconfigureしたらダメだったけど、CVSで落とした奴だったらうまくいったぜ!」
という書き込みを見かけたため、今度はCVSで落としてみました。
$ cvs -z3 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/julius co julius4
$ ./configure --with-mictype=alsa
(略)
****************************************************************
Julius/Julian libsent library rev.4.3.1:- Audio I/O
primary mic device API : alsa (Advanced Linux Sound Architecture)
available mic device API : alsa
supported audio format : various formats by libsndfile ver.1
NetAudio support : no
- Language Modeling
class N-gram support : yes
- Libraries
file decompression by : zlib library
- Process management
fork on adinnet input : no
Note: compilation time flags are now stored in "libsent-config".
If you link this library, please add output of
"libsent-config --cflags" to CFLAGS and
"libsent-config --libs" to LIBS.
****************************************************************
うまくいきました!
というわけで、make後、juliusを実行してみます。
$ ./julius/julius -C ../dictation-kit-v4.3.1-linux/main.jconf -C ../dictation-kit-v4.3.1-linux/am-gmm.jconf -demo -input mic
(略)
ALSA lib pcm_direct.c:998:(snd1_pcm_direct_initialize_slave) unable to install hw params
ALSA lib pcm_dsnoop.c:629:(snd_pcm_dsnoop_open) unable to initialize slave
Error: adin_alsa: cannot open PCM device "default" (Input/output error)
failed to begin input stream
エラー内容が変わりました。が、起動はせず・・・。
2.ALSADEVの設定
環境変数ALSADEVにハードウェアを設定しなければいけないらしく、もしかしたらそれが原因かと思い、設定します。
$ sudo arecord -l
**** ハードウェアデバイス CAPTURE のリスト ****
カード 0: Device [USB Audio Device], デバイス 0: USB Audio [USB Audio]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
カード 1: PCH [HDA Intel PCH], デバイス 0: ALC282 Analog [ALC282 Analog]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
arecord -lでALSAで認識しているデバイスが取得できます。
今回使用しているUSBマイクはカード0。LIVAでもともとあるオーディオ端子はカード1です。
USBマイクを環境変数ALSADEV設定するには
export ALSADEV="plughw:0,0"
と設定します。0,0はそれぞれ「カード番号,サブデバイス番号」を意味します。
で、実行した結果
Stat: adin_alsa: device name from ALSADEV: "plughw:0,0"
Stat: capture audio at 16000Hz
Stat: adin_alsa: latency set to 32 msec (chunk = 512 bytes)
Error: adin_alsa: cannot set PCM hardware parameters (Input/output error)
途中まではうまくいきましたが、やはりダメ・・・。
3.そしてJulius起動へ
エラー原因は結局わからず。しかし解決方法はわかりました。
USBマイクを外してもう一度接続します。
そうするとなぜかエラーが出ません。
しかし、一度Juliusを終了し、もう一度Julius起動すると同じエラーが出ます・・・謎。
$ ./julius/julius -C ../dictation-kit-v4.3.1-linux/main.jconf -C ../dictation-kit-v4.3.1-linux/am-gmm.jconf -demo -input mic
(略)
Stat: capture audio at 16000Hz
Stat: adin_alsa: current latency time: 21 msec
Stat: adin_alsa: current latency (21ms) is shorter than 32ms, leave it
Stat: "default": Device [USB Audio Device] device USB Audio [USB Audio] subdevice #0
STAT: AD-in thread created
<<< please speak >>>
Warning: strip: sample 0-340 is invalid, stripped
Warning: strip: sample 0-340 is invalid, stripped
Warning: strip: sample 0-340 is invalid, stripped(以下延々とWarningが発生)
念願の<<< please speak >>>がでました。
ただし、Warningが発生しているため、これを出ないように-nostripオプションを設定します。(Warningの原因は謎・・・)
【追記】
「MM-MCUSB22」というUSBマイクはマイク自体にミュートボタンが付いているのですが(会議用マイクだからね)、ミュート状態だとエラーが出るようです。ミュートを解除したらWarningが出なくなりました。
$ ./julius/julius -C ../dictation-kit-v4.3.1-linux/main.jconf -C ../dictation-kit-v4.3.1-linux/am-gmm.jconf -demo -input mic -nostrip
(略)
Stat: adin_alsa: device name from ALSADEV: "plughw:0,0"
Stat: capture audio at 16000Hz
Stat: adin_alsa: latency set to 32 msec (chunk = 512 bytes)
Stat: "plughw:0,0": Device [USB Audio Device] device USB Audio [USB Audio] subdevice #0
STAT: AD-in thread created
<<< please speak >>>
起動出来ました!
音声入力してみます。
※ 「こんにちは。今日はいい天気でした。」を言った場合。「今日はいい天気でした」は何回か発言しなおしてみたら以下のとおり。
pass1_best: 今日 は 、
sentence1: こんにちは 。
pass1_best: 今日 も あり 天気 でし た 。
sentence1: 今日 も いい 天気 でし た 。
pass1_best: 距離 的 でし た 。
sentence1: 今日 は いい 天気 でし た 。
「 距離 的 でし た 。」→「今日 は いい 天気 でし た 。」への文章解釈は驚愕ですが、結構認識してくれますね。
【LIVA】【Ubuntu server14.04】Juliusを使いたい(Juliusセッティング悪戦苦闘編)
USBマイクのセッティングは終わったため、Juliusセッティングをします。
1.Juliusのセットアップ
以下のサイトからソースファイルをダウンロードします。
http://sourceforge.jp/projects/julius/downloads/60273/julius-4.3.1.tar.gz/
※後述しますが、ここからの方法はなぜかうまく行きませんでした。
①解凍の実行
$tar zxvf julius-4.3.1.tar.gz
②configureコマンドの実行
$cd julius-4.3.1
$ ./configure
(略)
****************************************************************
Julius/Julian libsent library rev.4.2.3:- Audio I/O
primary mic device API : oss (Open Sound System compatible)
available mic device API : oss
supported audio format : RAW and WAV only
NetAudio support : no
- Language Modeling
class N-gram support : yes
- Libraries
file decompression by : zlib library
- Process management
fork on adinnet input : noNote: compilation time flags are now stored in "libsent-config".
If you link this library, please add output of
"libsent-config --cflags" to CFLAGS and
"libsent-config --libs" to LIBS.
****************************************************************
primary mic device API : oss となっています。Juliusのマニュアルを見ると、configureを実行すると通常はalsaが最初に選択されるらしいが、何故かUbuntuでは使われていないossが選択されます。
これが後々の悪戦苦闘に続きます。
補足:OSSとは?
Open Sound System のことであり、Ubuntuではすでに使われていないサウンドシステムであり、現在はALSAが標準で使われています。
ただ、古いソフトではOSSで動かすものもある。その場合はALSAでossエミュレートすることで実行することができます。(後述)
③makeの実行
$ make
何事もなければ、そのまま終了します。
2.実行、そして失敗へ
実行をします。が、その前にdictation-kitを事前にダウンロードする必要があります。
http://sourceforge.jp/projects/julius/downloads/60416/dictation-kit-v4.3.1-linux.tgz
$ tar dictation-kit-v4.3.1-linux.tgz
juliusを実行します。
$./julius -C dictation-kit-v4.3.1-linux/main.jconf -C ../../dictation-kit-v4.3.1-linux/am-gmm.jconf -demo -charconv utf-8 euc-jp -input mic
Stat: adin_oss: device name = /dev/dsp (application default)
Error: adin_oss: failed to open /dev/dsp
failed to begin input stream
はい、失敗しました。
実のところ、Ubuntuには/dev/dspがありません。そのため、実行できないので失敗します。
そのため、ALSAのOSSエミュレータを利用して実行します。
$padsp ./julius -C dictation-kit-v4.3.1-linux/main.jconf -C dictation-kit-v4.3.1-linux/am-gmm.jconf -demo -charconv utf-8 euc-jp -input mic
Stat: adin_oss: device name = /dev/dsp (application default)
Error: adin_oss: failed to open /dev/dsp
failed to begin input stream
padspを先頭につけると、OSSエミュレータによる実行ができます。他の参考サイトを見るとこれで出来ているようですが、私の環境では失敗でした・・・。
ちなみにaossコマンドでもダメでした。
$aoss ./julius -C dictation-kit-v4.3.1-linux/main.jconf -C dictation-kit-v4.3.1-linux/am-gmm.jconf -demo -charconv utf-8 euc-jp -input mic
ということで、あれこれ調べてみたところosspdを使えば良い、という情報を見つけました。
第299回 UbuntuでOpen Sound Systemアプリケーションを簡単に使う方法:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社
・・・が、これも結局juliusは起動しませんでした。
インストールは無事完了し、サーバ再起動後に確認するとサービス登録も問題なく完了。
$ service --status-all
(略)
[ + ] osspd
osspdのお陰で/dev/dspは出来ましたが、エラー内容は同じ。
やはりダメなのかと心折れそうになるが・・・
(続く)
【LIVA】【Ubuntu server14.04】Juliusを使いたい(USBマイクセッティング編)
家電を音声で操る、という魅力的なテーマに挑戦したく、Juliusのセッティングに着手しましたが、事の顛末を記載しておきます。
1.Juliusとは
詳しくはこちら。
発音辞書や言語モデル・音響モデルと組み合わせることで、特定の音声に対して色々動作をさせることができます。
2.下準備
マイクを用意します。
今回買ったのは「MM-MCUSB22」。部屋のどこからでも家電を操るとなると可能な限り集音が必要になりますので。
サンワサプライ WEB会議高感度USBマイク MM-MCUSB22
- 出版社/メーカー: サンワサプライ
- メディア: Personal Computers
- 購入: 1人 クリック: 2回
- この商品を含むブログを見る
USBマイクのセッティングとして、以下のように対応します。
①デバイスの確認
$sudo lsusb
Bus 001 Device 005: ID 0d8c:0010 C-Media Electronics, Inc.
(略)
Bus001 Device 002: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB
(略)
LIVAのUSBポートは2つありますが、今回はUSBハブにUSBマイクを設定しているため、上記のような出力になります(Device005がMM-MCUSB22)。
※2017/1/29追記
現在はラズパイ2で動かしていますが、その場合はUSBマイクを接続すると以下のようにオーディオモジュールが追加される。
$cat /proc/asound/modules
0 snd_bcm2835
1 snd_usb_audio
この snd_usb_audioを0になるように変更する必要がある。
②USBマイク優先度の変更
$sudo vi /etc/modprobe.d/alsa-base.conf
options snd-usb-audio index=-2
↓
options snd-usb-audio index=0
USBマイクの優先度が高くなるように、snd-usb-audioを0に変更します。
※2017/1/29追記
どうやら、ラズパイ2だと上記ファイルがないため作ります。以下のように作成。
$sudo vi /etc/modprobe.d/alsa-base.conf
options snd slots=snd_usb_audio,snd_bcm2835
options snd_usb_audio index=0
options snd_bcm2835 index=1
優先度を変更したら一度再起動します。
$sudo shutdown -r now
③優先度の変更を確認
$cat /proc/asound/modules
0 snd_usb_audio
1 snd_hda_intel
0 snd_usb_audioとなっていれば成功。
④マイクの音量を変更
$sudo amixer set Mic 54
Simple mixer control 'Mic',0
Capabilities: cvolume cvolume-joined cswitch cswitch-joined
Capture channels: Mono
Limits: Capture 0 - 57
Mono: Capture 54 [95%] [18.52dB] [off]
環境によって違うと思われますが、私のマシンでは最大設定値は57だそうです。
⑤録音できるか確認
$sudo arecord -r 16000 -f S16_LE test.wav
止めるときはCtrl+Cで(多分)。
⑥再生できるか確認
$ aplay ./test.wav
※2017/05/06追記
デバイスをちゃんと指定しておかないとaplayでファイル再生ができなくなったりするようなので、以下の対応を実施。明確にalsaで使うデバイスを指定する。
$ sudo aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 1: ALSA [bcm2835 ALSA], デバイス 0: bcm2835 ALSA [bcm2835 ALSA]
サブデバイス: 7/7
サブデバイス #0: subdevice #0
サブデバイス #1: subdevice #1
サブデバイス #2: subdevice #2
サブデバイス #3: subdevice #3
サブデバイス #4: subdevice #4
サブデバイス #5: subdevice #5
サブデバイス #6: subdevice #6
カード 1: ALSA [bcm2835 ALSA], デバイス 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
$ sudo arecord -l
**** ハードウェアデバイス CAPTURE のリスト ****
カード 0: Device [USB Audio Device], デバイス 0: USB Audio [USB Audio]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
上記の情報をもとにホームディレクトリ配下の.asoundrcを編集(記述場所はどこでもよさそうだけど、最初に記述)。
hw:X,Yの設定は、Xがカード番号、Yがデバイス番号です。
$ vi ~/.asoundrc
pcm.!default {
type asym
capture.pcm "mic"
playback.pcm "speaker"
}
pcm.mic {
type plug
slave {
pcm "hw:0,0"
}
}
pcm.speaker {
type plug
slave {
pcm "hw:1,0"
}
}