AmazonLinux2022へTeraterm接続で躓いた件について

2021年12月5日

概要

本日は、TeratermからAmazonLinux2022に接続した際に、時間を溶かしたので備忘録として記録します。

前提条件

  • Amazon Linux2022インスタンスをAWSにデプロイ済みであること。

※AmazonLinux2022のデプロイ方法は以下を参考にして下さい。

Launching Amazon Linux 2022 via EC2 Management Console

環境

ツール名バージョン
Teraterm4.106
(cmd client)sshOpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
(cmd client os)Microsoft Windows [Version 10.0.19043.1348]

事象

TeratermからAWS上に建てたAmazonLinux2022に対して接続すると認証に失敗する事象が発生します。

Windowsのコマンドプロンプトからssh接続すると正常に接続できます。
※altest.pemは、AmazonLinux2022インスタンス作成時に指定した秘密鍵を指定します。

D:\***\***>ssh -i altest.pem ec2-user@13.114.102.110

The authenticity of host '13.114.102.110 (13.114.102.110)' can't be established.
ECDSA key fingerprint is SHA256:u2mgWsLP+vfrTtQmNIGRFFVEXl5K50hGy13jmGIjTA4.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '13.114.102.110' (ECDSA) to the list of known hosts.
       __|  __|_  )
       _|  (     /   Amazon Linux 2022 AMI
      ___|\___|___|  Preview

http://aws.amazon.com/linux/amazon-linux-2022

ssh接続ログを見ると、ssh-rsaが許可されていない旨のログがでていることが確認できます。

これは、AmazonLinux2022内部のOpenSSHがRSA/SHA1(ssh-rsaシグネチャ)をデフォルトで無効化されている事に起因します。

OpenSSH、今後はRSA/SHA1をデフォルトで無効に

[root@ip-10-0-0-120 ssh]# tail -f /var/log/secure

Dec  3 17:44:15 localhost sshd[14533]: userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]

[root@ip-10-0-0-120 ssh]# ssh -V

OpenSSH_8.6p1, OpenSSL 1.1.1l  FIPS 24 Aug 2021

対処

sshd_configの先頭行等に PubkeyAcceptedAlgorithms=+ssh-rsa を書き込み、ssh-rsaシグネチャを許可するようにします。

cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.org

cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_$(date +%Y%m%d)

sed -i '1s/^/PubkeyAcceptedAlgorithms=+ssh-rsa\n/' /etc/ssh/sshd_config

systemctl restart sshd.service

動作確認

再度、Teratermからインスタンスにアクセスすると正常に接続できることが確認できます。

ログ上からも認証が許可されていることが確認できます。

[root@ip-10-0-0-120 ssh]# tail -f /var/log/secure

Dec  3 18:31:10 localhost sshd[15526]: Accepted publickey for ec2-user from ***.***.***.*** port 50731 ssh2: RSA SHA256:************************
Dec  3 18:31:10 localhost sshd[15526]: pam_unix(sshd:session): session opened for user ec2-user(uid=1000) by (uid=0)
Dec  3 18:31:32 localhost sshd[15560]: Received disconnect from ***.***.***.*** port 50731:11: disconnected by server request
Dec  3 18:31:33 localhost sshd[15560]: Disconnected from user ec2-user ***.***.***.*** port 50731
Dec  3 18:31:33 localhost sshd[15526]: pam_unix(sshd:session): session closed for user ec2-user

まとめ

AmazonLinux2022に入っているOpenSSLのバージョンが高いことによるもので、なにげに勉強になりました。

以下、リンクは、AmazonLinux2022、AmazonLinux2、CentOS、Rocky LinuxについてAmazonLinux2022の位置づけが語られている興味深い記事なので是非みてみてください。

What’s different about Amazon Linux 2022? – DEV Community

余談

AmazonLinux2022インスタンス作成時に、ユーザデータとして以下を記述し、デプロイすることで本記事事象を回避することができます。

#!/usr/bin/env bash
cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.org
cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_$(date +%Y%m%d)
sed -i '1s/^/PubkeyAcceptedAlgorithms=+ssh-rsa\n/' /etc/ssh/sshd_config
systemctl stop sshd.service
systemctl start sshd.service