AWS-EC2にSSH接続しようと、コマンドを実行。
ssh -i ~/.ssh/EC2_01.pem ec2-user@{EC2-01のIP}
すると、以下2つのエラーが出力。
WARNING: UNPROTECTED PRIVATE KEY FILE!
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
1つ目のエラーは、「プライベートキーが保護されていない」と教えてくれてる模様。
2つ目のエラーは、「権限がないよ〜」と言われている。
2つ目のエラーは、SSHを理解していないと解けなかったので、もし同じエラーでつまづいてる人が居たら参考にしてみてください。
試したこと
今回試したこととしては、以下になります。
- 権限変更
- 秘密鍵から公開鍵を発行
- AWS側のサーバーに公開鍵を配置
権限変更
こちらは、権限を読み込みのみに変更すればいいので以下のコマンドを実行。
chmod 400 EC2_01.pem
このコマンドを実行した後、WARNING: UNPROTECTED PRIVATE KEY FILE!
は表示されなくなった。
秘密鍵から公開鍵を発行
僕は最初、EC2から秘密鍵をダウンロードしてきたら、それを.ssh配下に配置して、コマンドを実行すれば、サーバー側の操作をリモート環境で行えるものと思ってました。
色々調べていくと、どうやら秘密鍵から公開鍵の作成が必要ということで、(よく考えたら当たり前ではある)以下コマンドを実行。
# DLしてきた、.pemファイルを指定
# -y OpenSSH形式の秘密鍵ファイルを読み出し、OpenSSH形式の公開鍵を標準出力する
# -f ファイルを指定
ssh-keygen -y -f EC2_01.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0rQiX6i5TzCGfKQ/e1Hn2Wd+lC+G4JYzY/yYZ8JIfn3Erym247NeDk7Qk4tppHC/GFlk1mt2SvG9A/5CFn7ngXzKsYpFeqzeoOtlnknqRn7xsD3xzFO0bgOs8xcMzzejXc2WLzgXlHHx9TZARGevx8GzW9ErTCZR9pPqqiy18fsLOcCM+xqCfTmSLggIVKfz0pq5wr5jLNurjtf0aiWnwJtH3EN6qwrW7Bvu17M4t63xgzLUs+JcoSFXIMlbM/xNZcg7D3urHvQ6nkVh5qohbDEISCWxi5JkVIVeF1vE11ZYDy6dki4EE7Geym+zh7Bso/v41YhKnc6zFbX4Gbcxx
こんな感じで、キーが作成されるので、一旦これをコピー。
AWS側のサーバーに公開鍵を配置
先ほど、コピーした公開鍵をAWS側のサーバーに配置したいので、AWS側の操作を行う。
インスタンスの概要>インスタンスの接続にEC2 Instance Connect
があるので、そこをクリックすると以下のような画面が表示される。
右下の接続をクリックすると、AWS側のターミナル画面が開く。
以下コマンドで、.sshファイルがあるか確認。
ls -la
デフォルトで、authorized_keys
のファイルがあると思うでのこの中に、先ほどコピーした公開鍵をペースト。
こちらもファイルの権限の変更が必要な場合は、先ほどと同じように変更する。
chmod 400 authorized_keys
自分のパソコンのターミナルに戻り、以下を実行すると…
ssh -i ~/.ssh/EC2_01.pem ec2-user@{EC2-01のIP}
接続に成功!!!
まとめ
今回はsshをいまいち理解していなかったために、起きたエラーでした。なんとなく理解してるものは、エラーのもとになるというのがよくわかる事例でした。
参考