プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

AWS EC2 への SSH ログインに失敗した話

こちらの記事で、 Redmine をアップグレードした話を書きました。この時、SSH で新サーバーに接続しようとしたら、なぜかうまく接続できませんでした。そのあたりの顛末がなかなかわかりにくかったので、メモっておきます。

なお、以下で『新サーバー』、『旧サーバー』というのは Redmine をアップグレードした際の新旧サーバーのことです。サーバーの中身そのものは、この記事の内容にあまり関係ないので特に触れません。もし、興味がある方は、 Redmine のアップグレードの記事のほうをご覧ください。

SSH で新サーバーにログインした際の症状

ターミナルソフトは RLogin (2.26.3) を使っています。で、立ち上げた EC2 に接続するために、キーペアの秘密鍵を指定した接続設定を作成して接続してみると、

ん?なぜかこんなエラーがでてきます。

秘密鍵がフォーマット違いでいくつかあるので、それを間違っていたかな?と思い、他のものに変更してもやっぱり接続できません。どういうこと?

旧サーバーへの接続を試してみるとこちらは問題なく接続できます。新旧のサーバーは移行が終われば旧サーバは削除する予定なので、キーペアとしては同じものを使っています。念のため aws のコンソールで EC2 のインスタンスを選択して、『詳細』タブの『起動時に割り当てられたキーペア』を表示させると同じものが表示されています。

ますます、どういうことかわかりません。ほとほと困りました。

原因判明

このままでは埒が明かないので、 WSL からコマンドラインで接続してみます。秘密鍵のファイルを WSL 側にコピーして、

mor@DESKTOP-DE7IL4F:~$ chmod 600 秘密鍵のファイル.pem
mor@DESKTOP-DE7IL4F:~$ ssh -i 秘密鍵のファイル.pem bitnami@新サーバーのIPアドレス
The authenticity of host '新サーバーのIPアドレス (新サーバーのIPアドレス)' can't be established.
ED25519 key fingerprint is SHA256:FMuxBl3qCIG/YLeysPvqTU3uwsyVgIsNchFIeQSKdyc.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '新サーバーのIPアドレス' (ED25519) to the list of known hosts.
Linux ip-172-30-3-148 6.1.0-37-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
       ___ _ _                   _
      | _ |_) |_ _ _  __ _ _ __ (_)
      | _ \ |  _| ' \/ _` | '  \| |
      |___/_|\__|_|_|\__,_|_|_|_|_|

  *** Welcome to the Bitnami package for Redmine 6.0.5           ***
  *** Documentation:  https://docs.bitnami.com/aws/apps/redmine/ ***
  ***                 https://docs.bitnami.com/aws/              ***
  *** Bitnami Forums: https://github.com/bitnami/vms/            ***
Last login: Sat Jul  5 08:48:08 2025 from xxx.xxx.xxx.xxx
bitnami@ip-172-30-3-148:~$

あれ?!接続できます。

ということは秘密鍵そのものは問題ないということのようです。でも、どうしてなんだろうか?

でも、こうなると、今使っている RLogin に何か問題があるんじゃないか?と疑いたくなってきます。

ということで、最新版の RLogin (この時点で 2.30.6)をダウンロードしてきてこれで試してみます。

zip ファイルを解凍して実行すると、なにやら警告メッセージが表示されました(スクショ取り忘れ)。なんか、互換性がうんぬん・・・とあったような気がしますが、気にせずそのまま続けます。

先ほど作ってたサーバーの接続設定をそのまま利用して、接続すると、あれ?

今度はこんなメッセージが表示されました。どういうことだ?

ゆっくりと考えてみると、どうも秘密鍵の署名方法が古いため、新しい openssh では使えない、ということのようです。

ということで、新旧サーバーの openssh のバージョンを調べてみると

旧サーバー

bitnami@ip-172-30-0-111:~$ apt list --installed | grep -i openssh

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

openssh-client/oldoldstable,now 1:7.9p1-10+deb10u4 amd64 [インストール済み、自動]
openssh-server/oldoldstable,now 1:7.9p1-10+deb10u4 amd64 [インストール済み]
openssh-sftp-server/oldoldstable,now 1:7.9p1-10+deb10u4 amd64 [インストール済み、自動]
bitnami@ip-172-30-0-111:~$ 

新サーバー

bitnami@ip-172-30-3-148:~$ apt list --installed | grep -i openssh

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

openssh-client/stable,stable,now 1:9.2p1-2+deb12u6 amd64 [installed,automatic]
openssh-server/stable,stable,now 1:9.2p1-2+deb12u6 amd64 [installed]
openssh-sftp-server/stable,stable,now 1:9.2p1-2+deb12u6 amd64 [installed,automatic]
bitnami@ip-172-30-3-148:~$

あー、旧サーバーは 7.9 なのに新サーバーは 9.2 になってますね。さきほどのエラーメッセージは、openssh 8.8 から SHA1 が無効になっているとのことだったので、どうもこれが影響して同じ秘密鍵なのに新サーバーでは受け付けてくれなかったようです。

でも、コマンドラインで接続できるのはなんでだろうか?

ということで、もう少し調べると、ぴったりの記事を見つけました。

EC2(Amazon Linux 2022)にターミナルソフトからSSH接続できない場合の対処方法 | DevelopersIO

ふむふむ、こちらの記事によると

  • サーバー側で SHA1 を有効にする
  • ターミナル側で利用する接続時のプロトコルを切り替える

のどちらかの方法で対応できるとのことです。ここは後者の方法で接続できればベストですね。

設定変更

ということで、ターミナルソフトの設定変更を行って、接続できるか試します。さきほどの見つけた記事も RLogin だったので、ほとんど同じことの繰り返しになってます。

まず、 RLogin を立ち上げます。『サーバーに接続』を選択して、設定変更を行いたいサーバーを選んで、『編集』ボタンをクリックします。

左側のメニュー(というかツリーというか)から、『サーバー』->『プロトコル』を選択して、『RSA2 認証鍵の署名方式(openssl-7.2以前はSHA1のみ)』を

『SHA1』から『SHA2-512』に変更します。これで、設定変更OKです。

一度これで、接続を試してみると、

こんな感じに無事に接続できました。

ということは、先ほどコマンドラインで接続できたのは、(特に引数で指定もしてないので) ssh コマンドが署名方式をよしなに処理してくれていたということなんでしょうね。

あー、長かった。

おまけ

RLogin の名誉のために 2.26.3 でさきほどの設定があるか確認すると、

見事にありますね。先に気づいていたら、あれこれ悩まなくても済んだパターンでした。