Web Arena Indigoでインスタンスを作成し、クライアントからssh接続をしようとしたが認証に失敗し接続ができない。
そんな時の対処法です。
この記事で解決する問題
以下の公式ドキュメントの手順に沿ってクライアントからvpsにssh接続しようとしたが失敗する場合。
Web Arena「キーペア作成(SSH鍵の作成)からインスタンスへのSSH接続までの手順を教えてください。(Indigo)」2022年6月13日取得
動作環境
クライアント
- OS:windows10
- sshクライアント:TeraTerm,PowerShell
VPS
- OS:Ubuntu22.04LTS
原因と大まかな解決方法
- Indigoで生成されるsshキーの形式がUbuntu 22.04LTSでは無効化されているため
- Windowsのファイル権限が不適切であるため
原因1に関しては別の公式ドキュメントで言及されていました。
Web Arena「Ubuntu 22.04 LTSのインスタンスにSSH接続/ログインできません。」2022年6月13日取得
このドキュメントの対処法を要約すると、Tera Termでssh接続するためには一度Tera Term以外のクライアントでVPSに入りUbuntuの設定を変えてTera Termから接続できるようにしてねということらしいです。
しかし、Windows環境では
Permissions for 'private_key.txt' are too open.
というエラーメッセージが表示されPowerShellからも接続ができません。
sshキーをIndigoから生成し、windowsへダウンロードした場合、秘密鍵(private_key.txt)へのアクセス権がゆるゆるになっているためそれを直してから接続しろと言われてしまいます。
ローカルのUbuntuでパーミッションを600に設定する
Windows上で権限を変更する方法もあるようですが、難解であったため諦めました。
Microsoft「icacls」2022年6月13日取得
幸いなことに私のPCにはdockerを使う関係で整えておいたWSL2がありました。
なので小難しいwindowsの権限をこねくり回すより、分かりやすいLinuxのパーミッション設定を使用するほうが簡単だと思い、linuxで事を済ませることにしました。
WSL2が有効でない場合用意してください。
Tech Plus「Windowsに「Ubuntu 22.04 LTS」をインストールする方法」2022年6月13日取得
private_key.txtをubuntuの任意のディレクトリーにコピーし以下のコマンドでパーミッションを変更します。
chmod 600 private_key.txt
これでssh接続の準備が整いました。
あとは、ubuntuで以下のコマンドを入力するとvpsに接続できるはずです。
ssh -i private_key.txt ubuntu@ your serserver's ip address
Tera Termは使わない方向で
Ubuntuの仕様とWindows環境固有の問題という2重のエラーで接続ができず、問題解決まで時間を取られました。
接続完了後VPSの設定を変更すればTera Termからでも接続できそうですが、他の部分でWindows環境固有の問題が起きても嫌なので私はWSL2から接続することにしました。