# Enable SSH Key Authentication
## SSHの鍵認証によるサーバーへのログイン
`ssh admin@kobe-kosen-robotics.org` とパスワードを使ったログインはユーザー名とパスワードの総当たり攻撃で不正ログインの可能性がある
SSHの鍵認証を用いて,登録された人のみがアクセスできるように設定をする
```{note}
自分のPC・サーバーで実行するコマンドが異なる.
`$` 記号の前に,どこで実行するコマンドなのかを示している.
```
## SSHのインストール
基本的にはいらないが,入っていない場合は実行する.
```bash
(Client & Server)$ sudo apt update && sudo apt install -y ssh
```
ssh関連のファイル保存ディレクトリを作成
```bash
(Client & Server)$ mkdir ~/.ssh
(Client & Server)$ sudo chmod 700 ~/.ssh
```
## SSH鍵の生成
公開鍵と秘密鍵はホームディレクトリーの.sshフォルダに保存される
```bash
(Client)$ mkdir -p ~/.ssh/kkr_server
(Client)$ ssh-keygen -t ed25519 -f ~/.ssh/kkr_server/id_rsa
# コマンド実行後に求められるパスフレーズは設定すべき(Enterで省略可)
# ssh-keygenコマンドのオプション
# -t [type] : 生成する鍵の暗号方式を指定できる
# -f [output_keyfile] : sshkeyの保存先とファイル名の指定できる
# -C [comment] : コメント
```
生成された鍵の暗号方式の確認
```bash
(Client)$ ssh-keygen -l -f ~/.ssh/kkr_server/id_rsa.pub
```
_**要確認::絶対に気をつけなければいけない!!**_
秘密鍵 [ id_rsa ] : 誰にも漏らしてはいけない
公開鍵 [ id_rsa.pub ] : 他の人に渡してもいい
## 公開鍵をコピー
生成した id_rsa.pub 内の公開鍵をcatで表示し,コピーする
ssh- ........ ....@..... の一行すべてコピーする
```bash
(Client)$ cat ~/.ssh/kkr_server/id_rsa.pub
```
## コピーした公開鍵をサーバーに登録
Client側からサーバーにログインする
```bash
(Client)$ ssh admin@kobe-kosen-robotics.org
```
ログイン後,以下のコマンドで authorized_keys ファイルを開く
```bash
(Server)$ vi ~/.ssh/authorized_keys
(Server)$ chmod 600 ~/.ssh/authorized_keys # テキストファイルを初めて作成した場合
```
新しい行に公開鍵をペーストして追加する
補足:Vimは,'a' で編集モード,'escape キー' で編集モード終了,':' でコマンドモード,'wq' で書き込んで終了(保存)
## sshの設定追加
```bash
(Client)$ vi ~/.ssh/config
```
※ [ # comment ] は消す
```text
Host kkr_server # alias(好きな名前でOK)
HostName kobe-kosen-robotics.org # サーバーのホスト名やIPアドレス
User admin # サーバーのユーザー名
IdentityFile ~/.ssh/kkr_server/id_rsa # 秘密鍵の絶対パス
IdentitiesOnly yes # IdentityFileで指定した秘密鍵に限定するかどうか(yes/no)
ServerAliveInterval 60 # 任意:通信がないとき,60秒ごとにサーバーへの応答確認をする(接続切れ防止)
ServerAliveCountMax 3 # 任意:連続で何回応答確認するか(Interval:60, CountMax:3 のときは少なくとも3分間は切れない)
```
## Login
Terminalからsshコマンド `$ ssh [alias]` を用いてログイン(VS codeからRemote SSHを使ってログインすることもできる)
秘密鍵を使用する際のパスフレーズが求められる
鍵の生成で設定したパスフレーズを入力
```bash
(Client)$ ssh kkr_server
Enter passphrase for key '~/.ssh/kkr_server/id_rsa':
Welcome to Ubuntu 20.04.5 LTS (GNU/Linux 5.4.0-136-generic x86_64)
.
.
(Server)$
```
## PasswordAuthentication の無効化
パスワード認証でのログインを無効化する
公開鍵が登録されており,それに対応する秘密鍵を持っている端末だけログインを可能にする
注意:この設定は上のSSH鍵認証でログインできていることを前提とする.もし,できていない状態で無効化すると永久的にログインできなくなる!!
```bash
(Server)$ cp /etc/ssh/sshd_config /etc/ssh/sshd_config.old
(Server)$ vi /etc/ssh/sshd_config
PasswordAuthentication yes → PasswordAuthentication no に変更
```
SSHを再起動して設定を反映
```bash
(Server)$ systemctl restart sshd
```
## Loginの確認
```bash
(Client)$ ssh kkr_server
Enter passphrase for key '~/.ssh/kkr_server/id_rsa':
Welcome to Ubuntu 20.04.5 LTS (GNU/Linux 5.4.0-136-generic x86_64)
.
.
(Server)$
```
## Reference
1. [【Linux】SSH公開鍵認証方式の設定手順](https://qiita.com/djkazunoko/items/e7de9a00b5e8a202c298#%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E8%AA%8D%E8%A8%BC%E3%82%92%E7%84%A1%E5%8A%B9%E5%8C%96)
2. [パスワード認証を禁止 - SSHサーバーの設定](https://webkaru.net/linux/ssh-password-auth-prohibit/)
3. [GitHubにSSH接続するまでの手順](https://qiita.com/kkrtech/items/a164f455c73867958181)