teppay’s log

セキュリティ、CTF、機械学習などに興味があります。情報系学生です。興味のあることを思い立った時に書きます。曖昧なことの整理にも使います。月1が目標です。

Raspberry Pi 3 Model BをUSBキーボードなしでセットアップする。[後編]

前編はこち
teppay.hatenablog.com

目標

  • ラズパイを起動する
  • MBPからsshでラズパイにアクセスする。
  • IPアドレスを固定する new!
  • Wi-fiにつなぐ
  • 公開鍵認証でsshログインできるようにする。

3. IPアドレスを固定する。

サーバとしての運用を目指すにあたり、グローバルに公開するのはまだだとしても、IPを固定して、sshでのアクセスを楽にしたいと思います。
DHCPにまかせておくと、IPアドレスが変わってしまって調べなおさなきゃいけませんからね…

/etc/network/interfacesをエディタで開きます。

$vi /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

iface eth0 inet manual

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

allow-hotplug wlan1
iface wlan1 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

コメントを見ると、「固定IPアドレスを使いたければ、dhcpcd.confと'man dhcpcd.conf'に相談しろ」って言ってます。
よって、man dhcpcd.confを見てみると、

$man dhcpcd.conf
[省略]
static value
             Configures a static value.  If you set ip_address then dhcpcd will not attempt to
             obtain a lease and just use the value for the address with an infinite lease time.

             Here is an example which configures a static address, routes and dns.
                   interface eth0
                   static ip_address=192.168.0.10/24
                   static routers=192.168.0.1
                   static domain_name_servers=192.168.0.1

             Here is an example for PPP which gives the destination a default route.  It uses the
             special destination keyword to insert the destination address into the value.
                   interface ppp0
                   static ip_address=
                   destination routers
[省略]

書き方のテンプレがありますので、これを/etc/dhcpcd.confに追記して再起動してみます。

interface eth0
static ip_address=192.168.1.10/24
static routers=192.168.1.1

例によってarpを使って設定したIPアドレスを探してみます。

$arp 192.168.1.10
? (192.168.1.10) at b8:27:eb:53:3d:95 on en0 ifscope [ethernet]

はいMACアドレスからラズパイとわかりますね。 IPアドレスが変わっていますので、固定できているんでしょう。

4. Wi-fiにつなぐ

手のひらサイズのコンピュータにケーブルがつながってるのは非常に邪魔だし、せっかくRaspberry Pi 3 Model Bには、デフォルトでWi-fiのアダプタがついているので、Wi-fiに繋いでしまおうと思います。

$sudo sh -c 'wpa_passphrase [SSID] [Key] >> /etc/wpa_supplicant/wpa_supplicant.conf'

これを実行して、再起動をかければいいそうです。 再起動する前に、無線のインターフェースにも上の固定IPの設定をしてから。。。

  • ラズパイを再起動する
$sudo shutdown -r now
  • LANケーブルをぶち抜く
  • pingを打ってみる
  • とおった!

これで、有線の煩わしさから開放されました!

5. 公開鍵認証でssh出来るようにする

将来的にグローバルに公開するにしても、しないにしても、sshのたびにパスワード入力するのめんどくさいし、怖いのでパスワード認証はオフにして、公開鍵認証できるようにします。

qiita.com

まんまここを参考にさせていただきました。
エイリアスも設定したので、

$ssh raspi

だけでパスワードの入力もなしにsshログインできるようになりました!!

まとめ

  • IPアドレスを固定できた
  • Wi-fiにつなげた
  • 公開鍵認証でsshログインできるようにできた

次にやりたいこと

このラズパイサーバをつかって、SlackのBotをつくる!

Raspberry Pi 3 Model BをUSBキーボードなしでセットアップする。[前編]

動機

  • ずっとラズパイで何かをやってみたかった。
  • サーバの勉強をしたかった
  • Slackのbotを作ってみようと思ったが、常時起動しているマシンがないため、かるく諦めていた。
  • なんとなく思い立って購入した。

用意したもの

  • MacBook Pro
  • Raspberry Pi 3 Model B(写真右)
  • Raspberry Pi 3用ACアダプタ(写真左)
  • micro SDカード 16GB(写真中央)
  • LANケーブル
  • HDMIケーブル(起動確認のため)
  • TV(起動確認のため) f:id:teppay:20170608230638j:plain

目標

  • ラズパイを起動する
  • MBPからsshでラズパイにアクセスする。
  • Wi-fiにつなぐ
  • 公開鍵認証でsshログインできるようにする。

1. ラズパイを起動する

1.1 OSのダウンロード

まずはいくらお手軽コンピュータといえど、OSがなければ動きませんので、OSをインストールします。
サーバ的な使い方の予定でGUIいらないので、Raspbian Liteを選びました。

https://www.raspberrypi.org/downloads/ > RASPBIAN > RASPBIAN JESSIE LITE
でOSをダウンロード
うちの回線くそなのでTorrentで行こうと思ったらうまく行かなかったので、Zipでダウンロードしたら1時間くらいかかった…

落としたZipファイルを解凍して、念のためSHA-1ハッシュを確認しました。(sha1 : c24a4c7dd1a5957f303193fee712d0d2c0c6372d)

sha1sumがなかったので、brewでインストールしました。

$brew update
$brew install md5sha1sum
$sha1sum 2017-04-10-raspbian-jessie-lite.img
3a38e94902cc2e478ac1ff9a2677e6ca0f30b94f  2017-04-10-raspbian-jessie-lite.img

あれ、、、違う、、、

$ sha1sum 2017-04-10-raspbian-jessie-lite.zip 
c24a4c7dd1a5957f303193fee712d0d2c0c6372d  2017-04-10-raspbian-jessie-lite.zip

解凍後のファイルをchecksumしていました笑

ダウンロード完了!

1.2 OSのインストー

dfコマンドでmicroSDが/dev/disk2s1にマウントされていることを確認して、アンマウント後にddコマンドでOSをコピー! ここで注意する必要があるのは、ddコマンドのコピー先は、/dev/disk2s1ではなく、/dev/rdisk2とします。
s1を消して、rを追加するそうです。s1はよくわかりませんでしたが、rを追加することで、バッファしないで書き込むため高速になるそうです。 ※/dev/disk2s1の部分は環境によって異なります。

$df
[省略]
/dev/disk2s1                               30302208      4992  30297216     1%       0          0  100%   /Volumes/NO NAME
$diskutil unmount /dev/disk2s1
$sudo dd bs=1m if=[解答した.imgファイルのパス] of=/dev/rdisk2

これでインストールできたと思うので、とりあえず一回起動してみようと思います。

  • microSDを安全に取り出す!
  • ラズパイに挿入!
  • HDMIケーブルでTVと接続!
  • 電源を接続!

f:id:teppay:20170609011153j:plain

はいきた!
OSのインストール成功しました!!!

2. MBPからsshでラズパイにアクセスする。

2.1 ログインせずにsshを起動する

「ログインせずにsshを起動する」(パワーワード)

ちょっと前までは、デフォルトでsshが起動していたそうですが、セキュリティ的に明らかに問題がありますから、最近のRaspbianではデフォルトではsshを起動していません。

USBキーボードがあれば、ラズパイに接続してログインして設定すればいいのですが、ありませんので、「ログインせずにsshを起動する」ことが必要です。

そこで、どのように「ログインせずにsshを起動する」かというと、
microSDのboot配下にsshというファイルを作る」だけで良いそうです。
そういう仕様だそうです。
早速やってみます。
f:id:teppay:20170609013402p:plain

こんな感じですかね?これでラズパイに戻してみます。

2.2 sshでログイン

次に、sshが起動したかどうかを確認するために、ルータとラズパイをLANケーブルでつなぎ、LAN内のラズパイを探します。 電源を入れて、LANに接続した時点でIPアドレスは付与されているらしいので、ARPを使って探します。

$arp -a
[省略]
? (192.168.1.4) at b8:27:eb:53:3d:95 on en0 ifscope [ethernet]

MACアドレスの上位6桁がベンダIDであることを利用してラズパイを見つけます。
Raspberry Pi FoundationのベンダIDはB8-27-EBであるため、ラズパイに付与されたIPアドレスは192.168.1.4であることがわかります。

さらに、sshが起動しているかをポートスキャンで確認します。

$nmap 192.168.1.4
Starting Nmap 7.31 ( https://nmap.org ) at 2017-06-09 01:44 JST
Nmap scan report for 192.168.1.4
Host is up (0.027s latency).
Not shown: 994 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
110/tcp  open  pop3
143/tcp  open  imap
3128/tcp open  squid-http
8080/tcp open  http-proxy

はい。
22番ポートで起動しているのがわかります。 デフォルトでは、
user:pi
pass:raspberry なので

$ssh pi@192.168.1.4
pi@192.168.1.4's password: 
pi@raspberrypi:~ $ sudo shutdown -h now

来ました!!
そして疲れたのでログインした途端にシャットダウンしてやりました笑

まとめ

  • ラズパイを起動できた
  • MBPからsshでラズパイにアクセスできた

次にやりたいこと

  • Wi-fiにつなぐ
  • 公開鍵認証でsshログインできるようにする。