情報が古い場合や、リンクが切れている場合がありますのでご注意下さい。
たまたま、浮いてるラズパイもあるしでやってみた記録を自分用にメモ。
但し、サーバー建ては初体験。
Raspbian Stretch Liteのインストール
Etcherを使ってimgファイルを書きこみ。
一度マウントが解除されるのでマウントし直して、ターミナルから次のコマンドで空ファイルを作り、SSHを有効にしておく(今のバージョンは無効になってるらしいので)
> touch /Volumes/boot/ssh
ラズパイは有線LAN接続して、SDカードを入れ電源をONにする。
Raspbianの初期設定
アップデートと自動更新の設定
SSHで接続して、アップデート実施。
$ sudo apt-get update && sudo apt-get -y dist-upgrade && sudo apt-get -y autoremove && sudo apt-get autoclean
$ sudo rpi-update
rpi-update
はやらなくてもいいかもだけど、最終的に外部公開するのが目標なので念のため実施次に、ソフトの自動更新するようunattended-upgradesを導入。
$ sudo apt-get install -y unattended-upgrades
このままでは動作しないようなので、/etc/apt/apt.conf.d/20auto-upgrades
を再生成する。
$ sudo dpkg-reconfigure -plow unattended-upgrades
この画面で、「アップデートがあった場合、自動的にダウンロードとアップデートしていいか?」と聞かれるので<Yes>を選択。
次にこの画面になるので、画像にあるように次の内容に修正する。
"origin=${distro_id},codename=${distro_codename}";
最低限これで動作するはず。これ以外の設定は下記ページ参照。
IPアドレスの固定
/etc/dhcpcd.conf
を編集する。
sudo nano /etc/dhcpcd.conf
編集するのは次の箇所。
interface eth0
static ip_address=[固定するラズパイのIPアドレス]
static routers=[デフォルトゲートウェイ(基本的にルータのIPアドレス)]
static domain_name_servers=[DNSサーバアドレス(基本的にルータのIPアドレス)] 1.1.1.1
ルータ側で払い出しIPアドレスを固定することができるならそっちもしておいた方が、いざって時にいいかも。
セカンダリDNSに指定した1.1.1.1は、最近公開されたプライバシー重視らしいパブリックDNS。
詳しいことはこちら。
raspi-configの設定
raspi-config
を起動して、設定を実施。
- Change User Passwordでパスワードを変更
- Localisation Options→Change Localeでja_JP.UTF-8を指定
- Localisation Options→Change TimezoneでAsia→Tokyoを指定
ここまでは必須。以下は任意。
- Overclock→Highに変更
- Advanced Options→Expand FilesystemでSDカード全域を利用する(初回起動時に設定されてるぽい)
<Finish>を選択すると再起動するか確認されるので、再起動実施。
セキュリティ向上作業
最低限のセキュリティを確保するために、初期ユーザーであるpiのユーザー名を切り替えます。
そのままでは、当然変更できないので作業用ユーザ(temp)を作成する。
$ sudo useradd -M temp
そのままでは、sudo
コマンドが利用できないので、作業用ユーザをsudoグループに追加し、パスワードを設定して、一度SSHから抜ける。
$ sudo gpasswd -a temp sudo
$ sudo passwd temp
$ exit
今度は、作業用ユーザでログインしてpiを新ユーザ名に変更する。
$ sudo usermod -l [新ユーザ名] pi
その後で、ホームディレクトリも新ユーザ名に合わせて作成し、piからデータを移動させる(でもここまでの作業でホームディレクトリは空なので必要ないかも)
$ sudo usermod -d /home/[新ユーザ名] -m [新ユーザ名]
さらに、piグループも新ユーザ名に変更してログアウト。
$ sudo groupmod -n [新ユーザ名] pi
$ exit
これで、piから新ユーザ名に切り替わったので、新ユーザ名でSSHでログインします。
その上で作業用ユーザを削除します。
$ sudo userdel temp
さらに、rootユーザも有効になっているため、ロックして無効化します(sudoつけるの面倒だけど、セキュリティ上無効にしておきたい)
$ sudo passwd -l root
これで最低限のセキュリティは確保できたはず。
秘密鍵を使ってssh接続する+パスワード入力を省略する
sshの秘密鍵を作ってsshの設定も済ませてしまう。
Mac側での作業
Macのターミナルで次のコマンドで鍵を作る。
> ssh-keygen -t rsa
作成する際、次の3つの質問があるが全部Enterキーで空入力する
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/tool-lab/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
※今回はラズパイ1台だけなのでkeyファイル名はデフォルトのままにしてるだけ。複数台で鍵の使い分けが必要なら1行目のkeyファイル名の指定は必須。
出来上がった.ssh/id_rsa.pub
をラズパイへコピー。
> scp .ssh/id_rsa.pub pi@raspberrypi.local:
ラズパイ側での作業
ログインして、次のコマンドでkeyファイルを~/.sshディレクトリへ移動と名前を変更する。
$ mkdir .ssh
$ cat id_rsa.pub >> .ssh/authorized_keys
外部からのアクセスを禁止するためパーミッションの変更を実施し、~/id_rsa.pubを削除。
$ chmod 700 .ssh $ chmod 600 .ssh/authorized_keys $ rm id_rsa.pub
鍵の準備ができたので、sshサーバーの設定を変更するため、/etc/ssh/sshd_configを編集する。
$ sudo nano /etc/ssh/sshd_config
※エディタはviでもemacs
でもvim
でもご自由に。Raspbian
のデフォルトがnano
で使いやすいからなだけ。
編集箇所と編集内容は次の通り。
基本的にはコメントアウトされてるので解除してyes/noに変更するだけ。
Port [任意のポート番号(10000〜65535)]
PermitRootLogin no
RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no
Portは、22番から任意の番号に変更する。
変更後、次のコマンドでsshdの再起動をして変更を反映する。
$ sudo systemctl restart ssh
新しくターミナルを開いて、ログインがうまく行くことを確認する。
うまくいかない時はやり直し。
SSHのクライアントのConfigファイルの設定
このままだとSSHを起動する時にオプションやらつけて入力が面倒なのでMacに~/.ssh/config
ファイルを作る。内容は次の通り。
Host [任意の名前]
HostName [ラズパイのIPアドレス]
User [新ユーザ名]
Port [ラズパイの/etc/ssh/sshd_config内のPortで指定した番号]
IdentityFile ~/.ssh/id_rsa
これで、任意の名前でSSHログイン可能になる。
DDNSの設定
DDNSには、No-IP.comを利用しました。
DUC(Dynamic Update Client)のインストール
ドメイン名を確保したら、以下のページにある手順でDUCをインストールしてグローバルIPの変更に対応できるようにする。
実際のコマンドは次の通り。
$ cd /usr/local/src
$ sudo wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
$ sudo tar xzf noip-duc-linux.tar.gz
$ cd noip-2.1.9-1
$ sudo make install
※ディレクトリ名は執筆時当時のものなので確認して実行すること。
make install
するときにエラーが出るけど、問題がないので無視してOK。
make install
を実行したら、No-IP.comのID(メールアドレス)とパスワードを聞かれるので入力。
次に更新間隔を分単位で入力するので、短めの時間(3〜5分)で一度設定。入力しない場合は30分間隔で更新する。
Please enter an update interval:[30]
その後
Do you wish to run something at successful update?[N] (y/N)
と、更新成功時に何か実行するかと聞かれるけど、実行するものもないのでそのままEnter。
終了したら、次のコマンドでDUCを起動して様子見。
$ sudo /usr/local/bin/noip2
指定した時間が過ぎたら、
$ sudo /usr/local/bin/noip2 -S
でIPが取得されているか確認。
$ sudo /usr/local/bin/noip2 -U 30
$ sudo /usr/local/bin/noip2 -S
これを実行して、更新間隔を30分にして、更新間隔が30分になっていることを確認。
DUCをサービス登録する
再起動した時に自動的に起動できるよう、サービス登録をする。
ググって見つけてきたこちらの設定ファイルを利用。
$ sudo nano /etc/systemd/system/noip2.service
で、コードをコピペして保存したら、コードに記載されているコマンドを実行してサービスに登録→再起動。
$ sudo systemctl enable noip2
$ sudo systemctl start noip2
$ sudo reboot
再起動後に、ちゃんと動いていることを確認しておく。
$ sudo systemctl status noip2 $ sudo /usr/local/bin/noip2 -S
後は30日に1回メールが来るはずなので、その都度ログインして更新しておく。
参考にしたサイト
以下のページを参考にしました。
コメント