Raspberry pi 初期設定メモ(Windows版)

## 動機
初めてのラズパイということで設定に手間取ったため、次回以降スムーズにできるようにまとめておく。
用途としてはwebサーバー化してみてLAMP環境構築してみようかなって感じです。
自分自身が駆け出しエンジニアのため、こんな簡単なことに結構時間を食ったので、同じような人が少しでも時間無駄にしなければいいなとも思い作成してます。

## 内容
- OSインストール（初期設定）
- RLoginでのssh接続設定
- ユーザー名(pi)の変更
- 公開鍵を使っての接続

## 1.OSのインストール(Windowsパソコンでの操作)
- そもそも何も知らずにAmazonで一式まるっとなラズパイ購入。(割高なので二度と買わないが)  

 ネットワークの知識もない上に、ネットの記事も精査せずかたぱっしから試した結果、よくわからない状況に。
 ということでフォーマットしてやり直そうと思ったのだがなかなかうまくいかず。。。
 結局、[Raspberry Pi Imager](https://www.raspberrypi.org/downloads/)でSDのフォーマット＆インストール。
 インストールしたSDをラズパイ本体に差し込みセットアップ。
 その後の初期設定は、普通に簡単な英語読めば誰でもできるので割愛。

## 2.RLoginでssh接続(Windowsパソコンでの操作)
今時コマンドラインでもssh接続できるらしいのだが、とりあえず今回はターミナルソフト[RLogin](https://www.watanabe-lab.jp/blog/archives/2852)でやってみることに。
写真貼るのがめんどくさいので、使い方は[こちら](https://qiita.com/pocket8137/items/e294715b5154487b9ae0)。(笑) 
ただ、この時点ではまだ設定しなくて良い。(この後いろいろ変えるため)
気になる人はラズパイの初期ユーザー

user:pi
password:raspberry

で接続確認してみるのもよい。

ちなみに、IPアドレスって何ぞやって人のために簡単に書いておくと、ネットワークに接続している機器のそれぞれの住所的なものです。
基本的には１台に1つ振り分けられているものだと考えておいてください。
これに関しては説明しだすとかなーーーーり長くなるので、調べてみてください。
古い記事ですが[こちら](http://www5e.biglobe.ne.jp/aji/3min/)でネットワーク全体を学ぶことをお勧めします。（古いので足りないところは補ってください）
学び方は何でもいいと思いますが、技術者として生きていくには必須かとおもうのでこの機会にぜひ。

ということで全体の流れを追いたいので、続きは3の途中で設定。

## 追記
sshコマンドでの接続方法も記載。

```terminal:ssh接続
 ssh [ユーザー名]@[ラスパイのIPアドレス] -p 22
``` 

## 3.ユーザー名(pi)の変更(これはどちらでも操作します)
今回、最終的にはwebサーバー化したいのでセキュリティ面も考えユーザー名そのままは危険すぎる。。。
ネットワークに接続するのなら買えるべきだと思い変更。

- 変更に関しては下記の2通りのやり方あり
 - 新しいユーザー(例：newpi)などを作成し、piユーザーを削除
 - piユーザーのユーザー名のみ変更する

個人的には、前者は怖い（だって普通に知らんところでなんか不具合おきそうやん。。。）
ということで、後者で変更。
なんでわざわざ仮のユーザー作るの？そのまま変更すればいいじゃんればいいじゃん！
て思ったけど、どうやらユーザー名を変更するためにはそのユーザーを使用してちゃいけないらしい。（めんどくさ！）
なんで、仮のユーザ作るわけですね、納得。
手順的には[この方の説明](https://jyn.jp/raspberrypi-username-change/)が一番わかりやすかったけど、Macでの設定なのでWindows用に記載。
まずはラズパイ側で下記コマンドを順番に実行。

```terminal:仮ユーザーの作成 
# '仮のユーザ(tmp)を作成する'
sudo useradd -M tmp
# 'tmpユーザをsudoグループに追加(そうしないとsudoが使えない)'
sudo gpasswd -a tmp sudo
# 'tmpユーザのパスワードを設定'
sudo passwd tmp
# 'ログアウトする'
exit
```

これで仮ユーザーは作成完了。
ちなみに、ラズパイのIPを調べるには右上の電波のマークのところにカーソルをしばらく置いておくと表示されるのでメモっておく。
もちろんコマンドでもできるけど、コマンドで調べたい人なら調べ方わかっているだろうから省略。

よし、じゃあtmpユーザーでログインして名前変えよう！
って思ったけど、どうやらどこかでpiユーザーを使用しているらしくできない。
CUIに変更するとできるらしいので、ラズパイの左上のアイコンをクリック。
[設定]ー＞[Raspberry Pi の設定]を選択。
そこで選べるところがあるので選んでリブートしてください。もちろんコマンドでのやり方もありますが、この辺は調べればすぐ出てきます。
[念のため](http://www.mizutan.com/wordpress/?p=1109)

ここまで終わったら、あとはWindowsのほうで操作します。
まずはtmpユーザーにRLoginでアクセス。
一応2のところで使い方は載せてあるのでそこを参照。
ホスト名にラズパイのIPアドレス、ログインユーザー名に先ほど作成した仮のユーザー(上記ならtmp)、パスワードに設定したパスワードを入力。
設定が完了したら接続できます。（できない場合は何かが間違っているので調べてください）
ということで繋がったらさっそくデフォルトのユーザー名piを変更。
ここでは、「newpi」という名前に変えている。

```terminal:ユーザー名piを変更
# 'usermod -lでユーザ名をpiからnewpiに変更'
sudo usermod -l newpi pi
# 'usermod -dでホームディレクトリを/home/piから/home/newpiに変更'
sudo usermod -d /home/newpi -m newpi
# 'groupmod -nでpiグループをnewpiグループに変更'
sudo groupmod -n newpi pi
```

これで、名前の変更は完了。
一度exitでセッションを切り、RLoginの先ほど設定した接続先のユーザー名とパスワードを上記で入力したものに変更。（ここの場合、ユーザー名はnewpi）
なぜそんなことをするかというと、先ほどの設定はpiの名前を変えるために、仮ユーザー(tmp)でラズパイにログインするためのものであって、今後は使わない。
使いたいのは、今名前を編集したユーザーなのでそのユーザーでログインできるように設定を変える必要がある。
設定が終わったら、ログインし書きコマンドを実行。

```terminal:仮ユーザーの削除
# '仮ユーザを削除(警告的なのが出るが、構わず削除)'
sudo userdel tmp
# 'newpiユーザのパスワードを変更'
sudo passwd newpi
```

これで無事名前変更に関するすべての工程は完了。

## 4.公開鍵を使っての接続（これもどちらでも操作します）
ssh接続にあたって、パスワードでログインするのはセキュリティ的によろしくないので公開鍵での接続に変更。
ポート番号を変更すべきなどもあるが今回は変更せず行う。
まずはWindows側での操作。※WindowsとRasberryPiが同ネットワークにある前提
まずはコマンドプロンプトで下記を実行。(メールアドレスは任意)

```terminal:鍵の作成
ssh-keygen -t rsa -b 4096 -C "email@sample.com"
```
鍵の生成場所を聞かれるが、こだわりがなければEnterでデフォルトの場所に保存

```terminal
Enter file in which to save the key (C:¥Users¥[ユーザー名]¥.ssh¥id_rsa):
```
パスワードが求められるので好きなパスワードを入力すると上で指定したフォルダにid_rsa(秘密鍵)とid_rsa.pub(公開鍵)が生成される。
###公開鍵をRaspberryPiに送信
まずは、**ラズパイ側**(Windows側でないので注意)のホームディレクトリ直下にsshフォルダを作成。
ssh接続して下記コマンドを実行。

```terminal:ディレクトリ作成
mkdir ~/.ssh
#ディレクトリが作成されていることの確認
ls ~/
```
ディレクトリが作成されていることが確認できたら、**Windows側**で下記コマンドを実行し公開鍵をラズパイに送信。

```terminal:公開鍵の送信
cd [公開鍵の場所(デフォルトではC:¥Users¥[ユーザー名]¥.ssh)]
scp -p 22 id_rsa.pub [新ユーザー名]＠[ラズパイのIPアドレス:/home/[新ユーザー名]/.ssh]
```
これでファイルの送信は完了。
###公開鍵のパーミッションの変更
公開鍵が送信されたので、使用できるようにする。
**RasspberryPi側**で下記コマンドを実行。

- id_rsa.pubの内容をauthorized_keysに追加

```terminal
cd ~/.ssh/
cat id_rsa.pub >> authorizedkeys
```
- パーミッションを変更し、公開鍵ファイルを削除

```terminal
#authorized_keysのパーミッションを600に
chmod 600 authorized_keys
#.sshフォルダのパーミッションを700に（うまくいかなければsudoをつける）
chmod 700 ~/.ssh
#公開鍵ファイルを削除
rm ~/.ssh/id_rsa.pub 
```

以上で設定完了なので、接続を確認。
Rloginで接続する場合は、SSH認証鍵に秘密鍵を設定して接続。
コマンドプロンプトで接続する場合は下記コマンドを実行。
※秘密鍵はデフォルトなら、C:¥Users¥[ユーザー名]¥.ssh¥id_rsa

```terminal
ssh [新ユーザー名]@[ラズパイのIP] -i [秘密鍵] -p 22
```

パスワードを要求されるので、公開鍵の生成の際に入力したパスワードを入力。
ラズパイのユーザー名が表示されれば成功。

###各種SSH設定の変更
ラズパイ側のsshd_configファイルを編集するので、まずは**ラズパイ側**でsshd_configを開く。

```terminal
sudo vi /etc/ssh/sshd_config
```
以下、該当のワードを探す際、「/」+ 検索したワードでワード検索できる（vimで開いている場合のみ）
- rootユーザーのログイン禁止  
　「#PermitRootLogin prohibit-password」を「PermitRootLogin no」に変更
 (検索する場合は、「/」+ PermitRoot あたりで検索)

- パスワード認証を無効化して公開鍵認証のみを許可
 「#PasswordAuthentication」を「PasswordAuthentication no」に変更

- 空パスワードを無効
　「#PermitEmptyPasswords no」を「PermitEmptyPasswords」に変更

再度、Windows側で下記コマンドを実行して接続できれば完了。

```terminal
ssh [新ユーザー名]@[ラズパイのIP] -i [秘密鍵] -p 22
```

##補足
- 2台目以降のパソコンをSSHで接続する場合  
２台目以降のパソコンをSSH接続したい場合は、公開鍵作成後公開鍵の中身のみをラズパイ側のautorized_keysに記載する。
- エイリアスの登録  
毎度ラズパイに接続するたびに長々とコードを打つのはめんどくさいのでエイリアスを登録する。
エイリアスを登録すると

```terminal
ssh [これから設定した名前]
```
だけで接続できるのでかなり楽。
**Windows側**の秘密鍵が保管されているディレクトリ(デフォルトではC:¥Users¥[ユーザー名]¥.ssh¥)にconfigファイルを作成。
下記のコマンドで作成可能

```terminal:configファイルの作成
type null > [秘密鍵が保管されているディレクトリ]¥config
```
所定の場所に作成できたことを確認し、該当ファイルをメモ帳等で開いて編集。

```terminal
Host [任意のホスト名(例：raspi)]
    HostName [ラズパイのIP]
    User [ラズパイのユーザー名]
    port [変更していなければ２２]
    IdentityFile [秘密鍵のパス]
```
以上を入力し保存。
接続確認は下記コマンド。

```terminal
ssh [上で記載した任意のホスト名]
#上の例の場合
#ssh raspi
```

##まとめ

途中からかなりざっくりになってしまいました。。。
また何かあったら追記していこうと思います。