ハマったところ
結論から言うと、EC2コンソールで作った鍵ファイル(~.pemファイル) の権限でアクセスできずハマりました。
また、やってて思ったのは、SSHについて「リモート接続するためのプロトコル」くらいのざっくりしたことしか知らなかったので、初心者の人は何をやるべきかがドキュメントだけでは分からないと思います。
環境
Windows 10 21H2
SSHクライアント:TeraTerm 4.105
インスタンス:Amazon Linux 2
SSHの流れ
まず何をすればSSHということができるか、という流れです。
- 接続元のクライアント(Windows)が持っておく鍵ファイルを作成する。
- クライアントはそれを使って公開鍵を作る。
- ホストのLinux でSSH 接続用のユーザーを作る。
- ホストのユーザーに公開鍵を追加する。(クライアント側で作った公開鍵の文字列をファイルにコピーするだけ)
- あとは TeraTerm などでSSH 接続用のユーザーで接続。
以下、大まかなやり方です。ネットを探すとこの辺りは出てくるので詳細は割愛します。
クライアント側の鍵ファイル作成
EC2コンソールで簡単に出来ます。最初にIAMユーザーをAdministratorAccessで作っておいて、EC2コンソールで設定するとそのユーザー用の鍵を作ってくれます。
認証キーの作成
以下のsshコマンドを使います。
ssh-keygen -y -f \path\to\your\pem-key.pem
Windows の場合、PowerShellが必要です。linux みたいなコマンドが叩けるコマンドプロンプトの進化版みたいなやつです。
公開鍵じたいはとても長い文字列がコマンドプロンプト上に直で出力されます。こんな感じ。
ssh-rsa srryeahu6auzjzhtsjssssssfds3/afeayrkias7k.......
Linuxユーザーの作成と公開鍵の追加
以下のコマンドを実行します。
sudo adduser newuser(ユーザー名)
sudo su - newuser
mkdir .ssh
chmod 700 .ssh
touch .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
vi .ssh/authorized_keys
-
sudo su - newuser
は、ユーザーを新しく作ったnewuser(SSH用ユーザー)に切り替えます。(ハイフンはLinuxのログイン時に環境設定ファイルを読み込むという意味)
-
chmod 700 .ssh
は、公開鍵ファイルを作成する親ディレクトリの権限をSSH用ユーザーだけに与えるということです。 -
chmod 600 .ssh/authorized_keys
は、同じく公開鍵ファイルに対して、書き込みと読み取り権限だけをSSH用ユーザーだけに与えるということです。
上記の最後のコマンドで作成した authorized_keys
ファイルに
コマンドプロンプトに出力された公開鍵(長い文字列)をコピーして保存します。(Viエディタで、i
-> 右クリックでペースト
-> Esc
-> :wq
と入力。)
ssh-rsa srryeahu6auzjzhtsjssssssfds3/afeayrkias7k.......
IAMでEC2にSSH接続する注意点
AWS特有の注意ポイントです。
EC2コンソールで作ったpemファイルの権限
公開鍵を作るときに、pemファイルの権限が誰でも閲覧可だと以下のようなエラーになります。
WARNING: UNPROTECTED PRIVATE KEY FILE!
これを防ぐには、Windowsの場合はファイルをエクスプローラーで右クリックしたメニューから、
所有者を自分にして、読み取り権限のみを付与します。
詳しい手順は参考サイトにある「インスタンスへの接続に関するトラブルシューティング」の エラー: Unprotected Private Key File (保護されていないプライベートキーファイル)
の項に書いてます。
Linux コマンドでは chmod 0400 .ssh/my_private_key.pem
を実行することと同じです。
参考サイト