はじめに
SSHについての記事はたくさんありますが、どうしてもイメージとして捉えられませんでした。
先日AWSのデプロイを行った際に、RUNTEQの講師の方に説明をしていただいて自分なりに解釈したので書き記しておきます。
なお、これは覚書であって手順書ではないのでご注意ください。実際に行う手順は一部省略しています。
こんな人が読んだら腑に落ちるかもしれない
- SSHはコピペでなんとかするもの。
- どうして公開鍵をいろんなところに登録するんだろう。
- 鍵とか錠とか言うけど、なんか納得できない。
SSH鍵事始め
|
|
このコマンドによって、~/.ssh
ディレクトリに(特に指定をしなければ)id_rsa
とid_rsa.pub
が作成される。前者が秘密鍵、後者が公開鍵となる。
公開鍵を外部に登録することはあるが、秘密鍵を登録することはない。というか、秘密鍵が漏れるとやばい。
よく言う鍵と錠の関係
よく、公開鍵は南京錠で秘密鍵はその鍵だと言う。確かに、錠は見せてもいいが鍵は見せてはならないと言うイメージではしっくりくるが、この鍵と錠は一対一の関係ではない。
実際はその南京錠を複製することがよくある。例えば、私はid_rsa.pub
をGitHubとEC2インスタンス内に登録している。どちらもid_rsa
で開けることができる。
また、一つのドアに複数の南京錠が付いていることもある。例えば、私のGitHubには複数の公開鍵が登録されている。この場合、いずれかの対応する秘密鍵があれば開けることができる。
(追記)コメントにてここのイメージについてご指摘をいただきました。
はんこと印影のイメージがとてもわかりやすかったので、参照していただけると幸いです。
EC2に接続するときの手順
EC2インスタンスを作成するときに、新規にキーペアを作成する。(すでに鍵がある場合はそれを使うこともできる)
このときにダウンロードしたプライベートキー(pemファイル)を~/.ssh配下に保存しておく。
作成したインスタンスを選択して「接続」ボタンを押すと、手順が表示されるので、基本的にはそれに従えばいい。ありがたいね。
SSH認証のエラーいろいろ
せっかくなので手順に従わずいろいろやってみたら、見事に怒られたので紹介する。
“aws-key.pem"を指定しない場合
|
|
特に鍵の指定がない場合は、id_rsa
を用いて認証を行う。
「id_rsa
の公開鍵は登録されていないぞ。アクセスさせるわけにはいかない」
ディレクトリに"aws-key.pem"がない場合
|
|
「そんな名前のファイルもディレクトリも無いぞ。鍵がないから駄目だ」
chmod 400 aws-key.pem
していない場合
|
|
「ばっかやろう!その秘密鍵は誰でも見れることになってるじゃないか!そんな鍵は認めないぞ!!」
パーミッションについて
手順に沿った場合
|
|
SSH認証に成功した場合、EC2インスタンス内に入ることができ、このように表示される。
Run "sudo yum update" to apply all updates.
と言われたので、yumをアップデートしておく。
公開鍵の場所
起動時に、パブリックキーコンテンツは、
~/.ssh/authorized_keys
内のエントリに配置されます。
Amazon EC2のキーペア - Amazon Elastic Compute Cloud
ということなので、実際に確認してみる。
|
|
authorized_keys
にaws-key.pem
のペアとなるパブリッシュキーが登録されていることがわかる。
EC2インスタンスの中で行う推奨設定
編集用ユーザーを追加する
デフォルトのユーザーアカウントを使用するのが多くのアプリケーションに適しています。ただし、個人が自分のファイルとワークスペースを持つことができるように、ユーザーアカウントを追加することを選択できます。さらに、新しいユーザー用にユーザーアカウントを作成することは、デフォルトユーザーのアカウントへのアクセス権を複数のユーザーに (経験のないユーザーも含めて) 与えるよりも、はるかに安全です。
Linuxインスタンスでのユーザーアカウントの管理 - Amazon Elastic Compute Cloud
ec2-user
はデフォルトユーザーなので、編集用のユーザーを作成する。
|
|
これで、編集用ユーザーであるusername
を作成することができた。
公開鍵を登録する
しかし、このままではusernameの~/.ssh/authorized_keys
に公開鍵の情報が登録されていないので、外部から直接アクセスすることはできない。
なので、authorized_keys
に公開鍵を登録する必要がある。
各ユーザー用にキーペアを作成し、インスタンスの各ユーザー用の
.ssh/authorized_keys
ファイルに各キーペアからのパブリックキー情報を追加できます。その後、ユーザーに対してプライベートキーファイルを配布できます。この方法では、AWSアカウントルートユーザー用に使用しているプライベートキーファイル(補足:aws-key.pem
のこと)と同一のファイルを複数のユーザーに配布する必要はありません。
Amazon EC2のキーペア - Amazon Elastic Compute Cloud
|
|
authorized_key
を作成し、このファイルに公開鍵情報を記述することで公開鍵情報を登録する。
Linuxインスタンスでのユーザーアカウントの管理 - Amazon Elastic Compute Cloudでは、EC2 で鍵を新たに作る手順を紹介しているが、ローカルで作成した既存のid_rsa.pub
を登録することもできる。
これで、次回からは$ ssh -i "鍵の名前" username@18.176.56.238
で、usernameとしてインスタンスにアクセスできる。
おわりに
これはSSHについて教えてもらったことを私なりにデフォルメして解釈したものです。
間違っている点や書き落としなどございましたら、是非ご指摘いただければと思います。
また、この記事で作成したEC2インスタンスとキーペアは現在削除済みです。
元記事Qiita