2015年11月28日土曜日

Kinect + Raspberry Pi 2 で監視カメラを作る(3)

外からラズパイにログインするための準備

前回でライブラリとベースとするソースは決めたのでこれからはごりごりコードを書いていきたいのだが、いかんせん家にいると子守と Fallout4 を並列にこなさなければならないのでその合間にコードを書くのはなかなかヘビーだ。

そこで少しでも作業が進むように外からスマフォなりタブレットなりで SSH でログインしてコーディングやその他の作業が出来る環境を整える。

何はともあれ、ラズパイを外部に公開するので、まずはそれなりにセキュリティを強化していく。

  • デフォルトユーザーのパスワード変更
    > passwd
  • 外部ログイン用グループ(developper)の作成
    > sudo groupadd developper
  • 外部ログイン用ユーザー(ruser)の作成
    > sudo useradd -c "remote user" -g developper -m -N ruser
  • 作成したユーザーにパスワードを設定
    > sudo passwd ruser
  • デフォルトユーザーの外部ネットワークからのログインを禁止
    /etc/security/access.conf に以下の行を追加
        - : pi : ALL EXCEPT 192.168.1.
これでWANからは先ほど作成したruserでしかログインできなくなる。
ルートの権限がほしい場合は、ruserでログインした後で、
> su - pi
でユーザーを切り替えるので両方のパスワードを知らないとroot権限を取得できないことになる。

さらに、
  • pi を先ほど作成したdevelopperグループに追加
    > sudo gpasswd -a pi developer
        ("usermod -G" は罠なので使ってはいけない)
  • 共有ディレクトリの作成
    > sudo mkdir /home/developer
    > sudo chown pi /home/developer
    > sudo chgrp developper /home/developper
  • 共有ディレクトリにSGIDを設定して異なるユーザーがファイルを作成しても同じグループになるようにする。
    > sudo chmod 2770 /home/developer/
  • デフォルトでグループに書き込み権限を与える
    /etc/profile に以下の行を追加
      umask 002
これで、外からは ruser, 家では pi でログインしても同じように作業が出来る。

そとからラズパイにログイン

グローバルIPをもらえる環境なら DDNS なりなんなり使えば良いが、我が家のマンションネットではそれが難しそうなのでホスティングサービスを利用して踏み台となる公開サーバーを用意して、そこに逆方向トンネルを掘って繋げる作戦で行く。

AmazonECにアカウント作成

この手のサービスは幾つかあるが、やっぱり無料で使えるAmazonECを選択した。
  • Ubuntuの仮想マシンを作成
  • 現在のサブネットからポート22(SSH)にアクセスできるようにセキュリティルールを追加
  • ssh でログイン
    Ubuntuの場合、初期ユーザー名はUbuntu
    Rloginの場合はSSH Identify Keyに仮想マシン作成時に生成したキーファイルを指定
  • ログインできたら早速 /etc/ssh/sshd_confに以下の一行を追加してトンネルを可能にする
    GatewayPorts yes
  • 次にラズパイにキーファイルをコピーしてアクセス権を変更
    > chmod 400 KeyFile.pem
  • キーファイルを使ってトンネルを掘る
    > ssh -i KeyFile.pem -f -N -R :10022:localhost:22 user@hostname
    ここでは仮想マシンの10022ポートをラズパイの22(ssh)ポートに転送する
  • EC2 ManagementConsoleに戻って先ほどの10022ポートをグローバルに通すようにセキュリティルールを変更
  • ポートに10022を指定して仮想マシンにsshをかけると手元のラズパイにログインできる。
設定が確認できたらautosshを利用して起動時に自動で接続させる
> sudo apt-get install autossh

一旦ルートになってSSHで仮想マシンにログイン
> sudu su -
> ssh -i /home/pi/KeyFile.pem user@hostname
※一見無意味な儀式だが、ルートのknown_hostsに登録するために必要となる

/etc/rc.localに以下の行を追加
sleep 10
/usr/bin/autossh -i /home/pi/KeyFile.pem -f -N -R :10022:localhost:22 user@hostname
※起動直後はネットワークの接続が完了していないことがあるので、とりあえず10秒スリープさせる

以降はラズパイを起動すると自動で仮想マシンにトンネルを作成してくれるので、そこからアクセスできるようになる。

スマフォ用のSSHクライアントは色々あるのでご自由に
どちらにしてもスマフォからがっつりコーディングするのは厳しいが、修正や簡単な動作確認用のコードの追加ならなんとか

0 件のコメント:

コメントを投稿