Amazon Linux 2023 に Teraterm から SSH 接続してみた : ssh-rsa 署名無効化対応

# はじめに

Amazon Linux 2023 が、[2023 年 3 月 15 日に一般公開になりました](https://aws.amazon.com/jp/about-aws/whats-new/2023/03/amazon-linux-2023/)。AWS に最適化されたパフォーマンスを提供する Linux ベースの 最新 OS です。OS を起動したままカーネルのパッチを適用できる kpatch の利用など、便利な機能が追加されています。

AWS Document に Amazon Linux のリリース頻度やサポート期限が記載されているのも大きい変更点です。2 年ごとにメジャーバージョンがリリースされ、5 年の長期サポートが提供されます。

![image-20230318151212755.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/a94a975d-b08f-ff2e-bab0-868e62f79fd4.png)

引用 : https://docs.aws.amazon.com/linux/al2023/ug/release-cadence.html



Amazon Linux 2023 と Amazon Linux 2 の違いは、[こちらの Document](https://docs.aws.amazon.com/linux/al2023/ug/compare-with-al2.html) に記載されています。**特に Windows で Teraterm を使っているユーザーに影響があるのが、デフォルトで SSH の `ssh-rsa` 署名が無効になったことです。**

(注 : ここから筆者の理解が間違ってる可能性があります。出来るだけ正しい内容になるよう心掛けていますが、誤りがあったら教えて下さい :bow:)

`ssh-rsa` の危険性について、OpenSSH のリリースノートに書かれているのですが、USD$50K より少ない金額で、SHA-1 アルゴリズムに対する選択プレフィックス攻撃が出来る問題があります。つまり、セキュリティ上の問題で、`ssh-rsa` は使わない方が良いということです。

- https://www.openssh.com/txt/release-8.8

　

Teraterm についてのお話に移ります。

SSH を接続するときに、接続元のクライアントと接続先サーバー間で「自分はこのアルゴリズムを使えるよ」と互いに送りあい、利用する暗号方式を決めていきます。今回のアップデートで、Amazon Linux 2023 の SSH サーバー側は、 `ssh-rsa` 署名がデフォルトで使えなくなりました。接続元のクライアント側は、代わりに `rsa-sha2-256` および `rsa-sha2-512` プロトコルや、ed25519 キーを使用した `ssh-ed25519` を利用する必要があります。

Teraterm では 5.0 beta 1 のバージョンから、 `rsa-sha2-256` および `rsa-sha2-512` プロトコルがサポートされました。 5.0 beta 1 のバージョンのダウンロードや Changelog は以下の URL から確認できます。

- https://osdn.net/projects/ttssh2/releases/78350

表現を変えると、Teraterm 5.0 beta 1 よりも古いバージョンを使っている場合は、 `rsa-sha2-256` および `rsa-sha2-512` プロトコルが使えません。そのため、Amazon Linux 2023 に接続するときに、今まで使っていた Teraterm で接続できないことが有りえます。(何らかの意識をしていない限り、基本的には Teraterm 5.0 beta 1 よりも古いバージョンでは接続できません)

この記事では、新しい Teraterm 5.0 beta 1 を使って、Amazon Linux 2023 に接続する方法を紹介します。



# 忙しい方に向けて、初めに結論

- SSH 接続が出来ない影響が出るのは、基本的に Windows で Teraterm を使っているユーザー。Mac や Windows で WSL2 を使っているユーザーは引き続き SSH 接続が出来る
- Teraterm は、 5.0 beta 1 以降のバージョンを使えば接続できるので、アップデートするのが一番楽。4.x 台など、以前のバージョンを使ってると、デフォルトでは接続できない。
- 今まで使っていた、公開鍵認証の秘密鍵ファイル・公開鍵ファイルはそのまま継続利用が可能



# キーペアの作成

ベータ版以前の Teraterm で生成した鍵がそのまま利用できるか確認するために、Teraterm 4.106 を使って、キーを生成します。

![image-20230318163149720.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/daca85e7-7ed3-f8d3-dbac-323809da6a5d.png)



デフォルトの RSA 2048 Bit で鍵を生成します。Bit は 4096 の方が良いと思いますが、今回はより一般的に利用されているであろう 2048 で検証してみます。

![image-20230318163250082.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/793e36a0-7c8f-cbeb-50d5-fd07210d84a7.png)



作成した公開鍵をキーペアとして登録します。

![image-20230318163823307.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/644881b9-8d10-711a-3450-3dd841371056.png)



Import を押します。

![image-20230318164055385.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/ce1ec68f-fe04-a651-9ecd-8729bd5fa96d.png)



KeyPair が登録できました。

![image-20230318164130878.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/1fc873d3-069d-98ef-9197-d13e8a1e53e5.png)



# Amazon Linux 2023 の構築

EC2 の構築画面で、Amazon Linux 2023 が選択できるようになっています。これを使って適当に構築します。

![image-20230318164255967.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/ed4a5c60-3d39-7960-d606-564a87a7fc59.png)



キーペアは、Teraterm で作成したものを指定します。

![image-20230318164320596.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/e103e82a-8bc7-8aba-4d90-e5f236eb1404.png)



Launch Instance を押します。

![image-20230318164358828.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/5ffd20da-0b2c-2637-ea68-8110f42b33fd.png)



Amazon Linux 2023 が構築されました。

![image-20230318164519333.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/1cb7e75a-1004-cb4a-a27b-be9e820ee6e2.png)



# 接続 NG : Teraterm 4.106 

接続が出来ない Teraterm 4.106 で SSH 接続を試みます。接続が失敗する想定です。

![image-20230318164653078.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/ca262b50-8631-1fee-6b78-1baae600ecac.png)



ec2-user で接続を試みます。

![image-20230318164743491.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/902a070e-e684-4413-7771-d887faf53a69.png)



想定通り、エラーになりました。

![image-20230318171500649.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/ad3bbf0a-3764-5d2d-4ac2-5886ea0e4295.png)



# 接続 OK : Teraterm 5.0 beta 1

Teraterm 5.0 beta 1 をダウンロードします。時期によっては通常版でも対応してると思うので、最新のバージョンを確認してみてください。

https://osdn.net/projects/ttssh2/releases/78350

![image-20230318171559560.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/930258e1-1a35-faac-d1f2-3fdc217d6606.png)



EC2 の Public IP を指定して OK を押します。

![image-20230318164851242.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/ac5c28ce-715e-db51-8eb8-107e224077fe.png)



ユーザー名 ec2-user や、Teraterm 4.106 で作成した RSA 2048 bit の秘密鍵を指定します。

![image-20230318164922747.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/b168434e-8dfa-c1be-572e-d46a274c2d43.png)



接続できました。

![image-20230318164944200.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/1f15bd51-0bf8-8ba4-f449-47c247e297e1.png)



# 付録1 : SSH の Host Key order の設定

Teraterm で、どういったプロトコルが対応しているか確認できます。Setup から SSH を開きます。

![image-20230318165325746.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/9a83f48a-e147-cbaf-bb82-6be292722d97.png)



Teraterm 4.106 の方です。

![image-20230318165209910.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/15fa6671-bad9-be1f-37fe-108e37ff6a31.png)



対して、Teraterm 5.0 beta 1 の方です。新たに `rsa-sha2-512` と  `rsa-sha2-256`  がサポートされていることがわかります。これで Amazon Linux 2023 のデフォルト設定でも接続できるというわけです。

![image-20230318165232234.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/e76058e2-61d5-17f4-a677-d9a9fb96e799.png)



# 付録2 : ED25519 キーで接続

他の接続方法として、ed25519 キーを使用した `ssh-ed25519` を利用する事も可能です。この方法を使うと、キーペアは更新する必要はありますが、Teraterm は古いものでも利用が出来ます。

ただ、EC2 として機能的な制限が出てくるため、新しい Teraterm を利用する方が好ましい気がします。

- Windowsインスタンス、EC2 Instance Connect、またはEC2シリアルコンソールではサポートされない



ED25519 のキーを生成します。

![image-20230318172035742.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/c309a76a-8ee4-8031-9ed7-f597735fd1f1.png)



キーペアを登録します。

![image-20230318172147862.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/a2209c34-5ed1-b954-3f8a-7cb1008321f8.png)



EC2 インスタンス作成の際に、新しいキーペアを指定します。

![image-20230318172227982.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/5ea6478b-0734-0d37-0f9d-f6c4a9900b80.png)



接続をしてみます。

![image-20230318174501371.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/b05ed562-56ee-7058-1c1e-b1d17a3f913e.png)



ED25519 の秘密鍵を指定します。

![image-20230318174528844.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/97b1e266-eaf6-390f-1fe9-dbd89272cde5.png)



接続できました。

![image-20230318174542864.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/f221772e-c1eb-4871-dc5f-951065e87e2f.png)



# 付録3 : ssh-rsa を有効化

非推奨ですが、OpenSSH サーバー側の設定を変更して、`ssh-rsa` を有効化させることも可能です。ただ、セキュリティ的には良くないです。この記事は技術的に出来る出来ないを検証するためであり、本番環境では有効化はしない方がよいです。

有効化のコマンドは以下の Document で言及されています。

https://docs.aws.amazon.com/linux/al2023/ug/ssh-host-keys-disabled.html



以下の install コマンドを実行します。

```
sudo dnf install crypto-policies-scripts
```



実行例

- 既にインストール済みでした

```
# sudo dnf install crypto-policies-scripts
Last metadata expiration check: 0:42:29 ago on Sat Mar 18 07:44:39 2023.
Package crypto-policies-scripts-20220428-1.gitdfb10ea.amzn2023.0.2.noarch is already installed.
Dependencies resolved.
Nothing to do.
Complete!
```



OpenSSH のポリシーを更新します。

```
sudo update-crypto-policies --set LEGACY
```



実行例

```
# sudo update-crypto-policies --set LEGACY
Setting system policy to LEGACY
Note: System-wide crypto policies are applied on application start-up.
It is recommended to restart the system for the change of policies
to fully take place.
```



上記のコマンドによって、以下の設定ファイルが書き換わっているのが発見できました。

- ssh-rsa が有効化となっている

```
# cat /etc/crypto-policies/back-ends/opensshserver.config
Ciphers aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc,3des-cbc
MACs hmac-sha2-256-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha1,umac-128@openssh.com,hmac-sha2-512
GSSAPIKexAlgorithms gss-curve25519-sha256-,gss-nistp256-sha256-,gss-group14-sha256-,gss-group16-sha512-,gss-gex-sha1-,gss-group14-sha1-
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1
HostKeyAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp256-cert-v01@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,sk-ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519,ssh-ed25519-cert-v01@openssh.com,sk-ssh-ed25519@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com,rsa-sha2-256,rsa-sha2-256-cert-v01@openssh.com,rsa-sha2-512,rsa-sha2-512-cert-v01@openssh.com,ssh-rsa,ssh-rsa-cert-v01@openssh.com,ssh-dss,ssh-dss-cert-v01@openssh.com
PubkeyAcceptedAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp256-cert-v01@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,sk-ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519,ssh-ed25519-cert-v01@openssh.com,sk-ssh-ed25519@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com,rsa-sha2-256,rsa-sha2-256-cert-v01@openssh.com,rsa-sha2-512,rsa-sha2-512-cert-v01@openssh.com,ssh-rsa,ssh-rsa-cert-v01@openssh.com,ssh-dss,ssh-dss-cert-v01@openssh.com
CASignatureAlgorithms ecdsa-sha2-nistp256,sk-ecdsa-sha2-nistp256@openssh.com,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,sk-ssh-ed25519@openssh.com,rsa-sha2-256,rsa-sha2-512,ssh-rsa,ssh-dss
```





これ以降、Teraterm 4.106 でも接続が出来ました。

![image-20230318174327568.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/0f96dcdf-47a5-432d-eb3d-a6bcf54470e8.png)



# 参考 URL

- https://qiita.com/angel_p_57/items/30a12a0d45457b5f76d5
- https://qiita.com/angel_p_57/items/2e3f3f8661de32a0d432
- https://qiita.com/angel_p_57/items/19eda15576b3dceb7608
- https://qiita.com/angel_p_57/items/d7ffb9ec13b4dde3357d
- https://nulab.com/ja/blog/backlog/disables-rsa-sig-using-the-sha-1-in-openssh/
- https://qiita.com/ntrv/items/ed0c14f3ea7ee20fe6f9
- https://pfs.nifcloud.com/navi/words/ssh.htm