Ubuntu22.04 公開鍵認証でSSH接続する ED25519

## 概要
インストールしたてのUbuntu22.04に公開鍵認証でSSH接続できるように設定します。鍵と鍵のパスフレーズでログインできるようにします。ポート変更やパスワード認証不可、rootログイン不可にしたりしてセキュリティを固めにします。ローカル環境はWindows10 Pro、teraterm4.105です。Ubuntu22.04のIPは192.168.88.15です。鍵のアルゴリズムはrsaではなくED25519を使いました。

下記のようにsshが起動していることを前提としています。(私はUbuntuインストール時にsshをインストールしました。そのあと特に何もしていませんが、sshは自動で起動しているみたいです。)
```
$ systemctl status ssh.service
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/15730f9f-8a9a-ce12-acbe-5166c5df97cc.png)

## 大雑把な手順
1. 公開鍵と秘密鍵をteratermで作る
2. 公開鍵をサーバに設置
3. /etc/ssh/sshd_configを変更
4. ファイアウォール設定変更
5. 接続確認

[こちら](https://webkaru.net/linux/tera-term-ssh-login-public-key/)を参考にさせていただきました。

## 手順1 公開鍵と秘密鍵をteratermで作る
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/8c84430e-8edc-452b-60d1-47285ddeb5cb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/4f1bf8f0-3e9e-a3b5-ddc2-7b846d96228f.png)
ED25519を選びます。rsaはUbuntu22.04ではデフォルトで無効にされています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/470465b0-ec1e-4b45-0173-14b5857df28d.png)
好きなフォルダに保存しておきます。鍵のパスフレーズは手順5で使います。忘れないでください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/d00bac32-e561-d9a9-815b-9b85940d1f88.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/96276e4a-423f-a4f4-ed38-b120a99d5754.png)


## 手順2 公開鍵をサーバに設置
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/5a812f54-7638-d305-3b11-ef91242cf96c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/ec315172-d055-b117-8378-f879b0cc3cc3.png)
チェックを外しておかないと後ではまります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/927136fa-fdb7-f849-34fd-2fc0fb442fed.png)
公開鍵を設置するためにブレインパスワードでサーバにSSH接続します。ユーザ名パスワードはインストール時に設定したものか、ログインできるものを使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/6ecd1cff-fbf6-bcf6-03ad-c350f1250c88.png)
ログインできるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/7dc3dcb3-5993-58d8-bddc-10826637273f.png)
ログインしたら、さっき保存したid_ed25519.pubをteratermにドラッグアンドドロップします。するとこの画面が出てくるのでOKを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/151321ff-f525-2250-3111-eccbd3d293ea.png)
送られたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/8df0f823-d128-295f-5ba9-fd8dd78984a5.png)
ここからは公開鍵id_ed25519.pubをリネームして.sshフォルダに移動する作業をするのですが、もともとhomeに.sshフォルダがありauthorized_keysが入っていいたので、default_authorized_keysにして念のためバックアップとしておきます。
```
$ mv .ssh/authorized_keys .ssh/default_authorized_keys
```
id_ed25519.pubをリネームして.sshフォルダに移動させて、ファイル、ディレクトリの権限を変更します。
```
$ mv id_ed25519.pub .ssh/authorized_keys
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys
```

## 手順3 /etc/ssh/sshd_configを変更
sshd_configのバックアップを取っておきます。
```
$ sudo cp /etc/ssh/sshd_config /etc/ssh/backup_sshd_config
```
sshd_configをnanoで書き換えます。
```
$ sudo nano /etc/ssh/sshd_config
```
ポート番号など、セキュリティを固くします。
上から順番に変更点。コメントアウトを消したところもあります。
```
Port 55055
PermitRootLogin no
PasswordAuthentication no
PasswordAuthentication no
```
変更したら、Ctrl+X押して、Y押してEnter。sshを再起動します。
```
systemctl restart sshd
```

## 手順4 ファイアウォール設定変更
ここからサーバのコンソールで作業します。55055だけアクセスできるようにします。limitは30秒間の間に6回以上接続を試みたIPアドレスを許可しないです。
```
$ sudo ufw enable
$ sudo ufw limit 55055
$ sudo ufw status
```
こんな感じになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/c8e0a52b-15bd-2925-d126-ae9144ab0cc7.png)

## 手順5 接続確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/49b133bb-353d-4a0d-a760-3c89fbe279c1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/ad2b2146-0a42-15a8-5b72-d85752e3da00.png)
パスフレーズは手順1で鍵作成時に入力したものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/9f43e3f6-e862-a680-8505-6b48e1ac1329.png)
ログイン出来たら完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744334/ce9449c3-1787-9c50-b229-585f93d02734.png)
22番ポートやパスワード、rootでログインを試みましたが、設定どおりログインできないようになっていました。

## さいごに
Ubuntu20.04では、鍵のアルゴリズムにrsaを使っても問題なかったのですが、22.04ではエラーが出るらしいです。(デフォルトはrsaが無効にされている。私は、たまたまエラーが出る前に知って、エラーが出るか見れてません。)22.04でもrsaを使う回避策があるらしいのですが、解決策はED25519を使うとのことでした。
https://ja.confluence.atlassian.com/bitbucketserverkb/ssh-rsa-key-rejected-with-message-no-mutual-signature-algorithm-1026057701.html