1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Raspberry Piメモ] SSHでログインするまで

Last updated at Posted at 2019-07-27

今頃になってRaspberry Piを使おうと思ったので、先人たちの知恵をお借りして設定していく。先人たちがたくさん資料を残してくれているおかげで、ここでは特に新しい話題はないが、それでもつまづいたところ・調べたことをまとめる。

なお、最後に書いたようにDockerを入れてみようとしたところエラーが出てインストールできなかった。RaspbianとDockerはつい先日安定版が更新されたばかりらしく、Issueがオープンになっている。

#インストール
NOOBというOSをインストールするためのソフトを書きこんだSDカードを挿してからRaspberry Piを起動すると、インストールするOSを選ぶ画面が表示される。特にGUIが要らなければ「Raspbian Lite」を選んでインストールすれば良い。なお、NOOBが無くてもディスクイメージを書くことでインストールできるが、ライタソフトが必要になるらしいので、NOOBの方が手っ取り早いかと思う。

言語設定の注意: NOOBでインストールしていると、画面下に言語設定が表示される。ここで日本語を選択すると、再起動後にメッセージが日本語化されるらしいのだが、フォントが無いために■■■■■と表示される「豆腐現象」に陥る。これが嫌なら、まずは英語のままとし、キーボード配置をJapaneseにすると良い。

何度かやり直すと思うので、フォーマッタを用意した方が良い。SDカードはOSインストール時にパーティションが切られるのだが、Windowsだとこれがフォーマットできないことがあるためだ。フォーマットにはSDカードの仕様を策定している団体SD AssociationのSDメモリカードフォーマッターがあるので用意しておくと良い。(というかセッティング開始から1時間でお世話になった)

パッケージ更新

パッケージを更新する前にミラーサイトの設定をする。デフォルトでは海外のミラーサイトを使う設定になっているので、ダウンロードに時間がかかることがある。日本のサーバを選んでおくとダウンロード時間が改善する。

ミラーサイトの設定ファイル/etc/apt/sources.listはパーミッションが622(rw-r--r--)なので、sudo nano /etc/apt/sources.listで開く。以下は2019年7月時点の安定板であるコードネームbusterで使うときの設定となる。

# deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
deb http://ftp.jaist.ac.jp/raspbian buster main contrib non-free rpi
deb http://ftp.tsukuba.wide.ad.jp/Linux/raspbian/raspbian/ buster main contrib non-free rpi
deb http://ftp.yz.yamagata-u.ac.jp/pub/linux/raspbian/raspbian/ buster main contrib non-free rpi

設定ができたら、更新のコマンドを実行する。コマンド自体はあまり理解できていないが、以下を実行すると各パッケージが最新になるらしい。なお、ファームやカーネルの更新ができるとされるrpi-updateは実験用らしいので、一般人は実行しない方が良いらしい。(安定して世に出回ってからの方が安心ということ)

# パッケージのリストを更新
sudo apt update
# パッケージを更新
sudo apt dist-upgrade
# いらないソースを消す
sudo apt autoclean

ユーザ設定

デフォルトではユーザ名pi、パスワードraspberryになっているので、そのままSSHを有効にするのは怖い。SSHを有効にする前に、ユーザの設定をしておく。やり方は色々あるらしいが、以下を参考にpiの名前を変える方式にした。参考にしたページに書いてある通り、piユーザは削除はしない方が良いと思うためだ。

  1. 一時的にユーザtmpを作成し、sudoグループに加える
  2. いったんログアウトし、tmpで作業する
  3. piユーザおよびグループを改名する
  4. piユーザのパスワードを変える
  5. 新名称のpiでログインしなおし、tmpを削除する

言語設定

ここまでは英語版で作業してきたが、日本語が使えるように設定する。ただし、日本語フォントはインストールしない。というのも、SSH経由で利用する場合はSSHのターミナルはPCなので、Raspberry Pi側に日本語フォントが無くても文字化けが起きないからだ。

設定はraspi-configからLocalization Optionsを選び、Change Localeを開いて、ロケールのち一覧からja_JP.UTF-8.UTF-8を選択する。デフォルトロケールもja_JP.UTF-8.UTF-8に設定したら、処理が完了するのを待つ。設定は再起動すると反映される。

図は既にロケールを変更後にPC側のSSHのターミナルで表示しているので、豆腐表示になっていない。

SSHをつなぐ

キーボードを行ったり来たりするのが面倒なので、まずはSSHを有効化してしまい、PCからSSHを介して設定を行う(事前にユーザとパスワードをデフォルトから変えているならリスクは小さいはず)。SSHの有効化にはraspi-configコマンドで設定画面を開く。

設定画面を開いたら、Interfacing Options > SSHを開き、有効化する。

設定ができたらputtyなどでログインする。IPはip aコマンドで調べられる。

##公開鍵を登録する
puttygenなどで接続元(PC側)で秘密鍵と、対になる公開鍵(ssh-rsaから始まる)を作成する。Key Commentはログイン時にどの鍵を使ったかの表示に使われるので、設定しておくと良い。秘密鍵にはパスワードがつけられるので、念のため設定しておくと安全だが、普通は付けない模様。

Raspberry Pi側に公開鍵の保存場所が予め存在しなければ自分で用意し、公開鍵を保存するファイルauthorized_key2を作る。ファイル名は、sshd_configAuthorizedKeysFileで指定しているものであればよい。作成したら、先ほど用意した公開鍵を追加する。

最後にパーミッションを設定する。(他の人が見えてしまうような鍵は信用できないためか、パーミッションエラーになるらしい?)

cd ~
mkdir .ssh
nano .ssh/authorized_key2
(鍵を編集…1行に1つの公開鍵を書く)

chmod 700 .ssh/
chmod 600 .ssh/authorized_keys2

登録したら、一旦SSHの接続を切り繋ぎなおして確認する。puttyの場合、IPとポートに加えて、Connection > SSH > Authで秘密鍵を設定することで、ログインできるようになる。Connection > Data からAuto-login usernameを設定しておけば、ユーザ名を入力する手間が省けるようになる。
image.png image.png

ログイン時に公開鍵で入ったことが表示されたらOKとなる。下図ではパスワードを設定した鍵でログインしているので、パスワード入力もしている。
image.png

##sshd_configを変える
/etc/ssh/sshd_configに設定ファイルが置かれているので、適宜書き換える。基本的にはデフォルト値で特に問題ないらしいが、ログインに関する設定値は変えておく必要がある。設定後、SSHサーバかRaspberry Pi本体を再起動して、SSHでログインできることが確認できたら設定完了。

項目 設定値 備考
Port 適当 well-known port 以外の適当な値でよい
PermitRootLogin no rootでログインさせない。
PubkeyAuthentication yes 公開鍵でログインできるようにする。
PasswordAuthentication no パスワード認証はしない。(PermitEmptyPasswords)

PermitEmptyPasswordsをnoにするというのを見かけるが、SSHD_CONFIG (5)によると、このオプションはパスワード認証が有効な時にしか影響しないらしい。公開鍵であればパスワードの有無は問われないので、デフォルト(コメントアウト)のままで支障はない。

次やること

node.jsでサーバを動かしたい。Dockerを使って環境を作る事例があるみたいなので、倣ってやってみる。本当に、Raspberry Pi事例が豊富で助かる。ただ、RaspbianもDockerもバージョンが上がりたてだったため、エラーが出てしまった。とりあえずすぐ必要ではないから困らないものの、タイミングが悪い。

Loading new aufs-4.19+20190211 DKMS files...
It is likely that 4.19.58-v7+ belongs to a chroot's host
Building for 4.19.58+, 4.19.58-v7+ and 4.19.58-v7l+
Building initial module for 4.19.58+
Error! Bad return status for module build on kernel: 4.19.58+ (armv7l)
Consult /var/lib/dkms/aufs/4.19+20190211/build/make.log for more information.
dpkg: パッケージ aufs-dkms の処理中にエラーが発生しました (--configure):
 installed aufs-dkms package post-installation script subprocess returned error exit status 10
処理中にエラーが発生しました:
 aufs-dkms
E: Sub-process /usr/bin/dpkg returned an error code (1)

ビルドログ/var/lib/dkms/aufs/4.19+20190211/build/make.logを見てみると、以下のようにコンパイルでこけているようだった。https://download.docker.com/linux/raspbian/dists/buster/stable/ を見る限り、つい1日前にアップロードされたようだから、もう少し待たないといけない。

/var/lib/dkms/aufs/4.19+20190211/build/fs/aufs/super.h:134:2: error: unknown type name ‘vfs_readf_t’
  vfs_readf_t  si_xread;
  ^~~~~~~~~~~
/var/lib/dkms/aufs/4.19+20190211/build/fs/aufs/super.h:135:2: error: unknown type name ‘vfs_writef_t’
  vfs_writef_t  si_xwrite;
  ^~~~~~~~~~~~
In file included from /var/lib/dkms/aufs/4.19+20190211/build/fs/aufs/branch.h:33,
                 from /var/lib/dkms/aufs/4.19+20190211/build/fs/aufs/aufs.h:38,
                 from /var/lib/dkms/aufs/4.19+20190211/build/fs/aufs/module.c:25:
/var/lib/dkms/aufs/4.19+20190211/build/fs/aufs/super.h:134:2: error: unknown type name ‘vfs_readf_t’
  vfs_readf_t  si_xread;
  ^~~~~~~~~~~
1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?