目次
以下構成で記載しています。
| No. | タイトル |
|---|---|
| 1 | 誰向けの内容か。当該記事を作成したきっかけ。 |
| 2 | SSHとは |
| 3 | SSH通信の認証手順 |
| 4 | まとめ |
誰向けの内容か。当該記事を作成したきっかけ。
- CloudPractitionerの勉強をしている人で、SSH通信のイメージを掴みたいと思っている人向けに書きました。
(「イメージレベルだとしても看過できない、この記載はおかしいだろ!」な点ありましたらご指摘いただけますと幸いです。) - CloudPractitionerの勉強中に、EC2のOSを操作するならSSH通信よりセッションマネージャーのほうがいいよ〜という内容を見る
→そもそもSSH通信ってなんぞや?どうやってOSにつなげるの?状態だったので、自分の言葉で以下をまとめてみました。 - SSHとは
- SSH通信の認証手順
SSHとは
- Secure SHellの略。
- 安全に(Secure)に他OSのshell(※)を操作するプロトコル通信。「安全に」=「暗号化して」ということ。
※shell:人-OSのIF。
OSを動かすための操作を人語からPC語に翻訳してくれる。(例 「cd 〜」→ここのディレクトリに移動してくれと人間さんが言っているよ)
-
前身はtelnet。こちらは暗号化せずに通信していた。
平文のままでshell操作の通信するのは怖いだろとのことで、SSHが生まれた。 -
この技術を使って、EC2のOSにログインしてOS操作ができる。
具体的には以下のようなコマンドを打ってログインするらしい
//ssh -i 秘密鍵の名前 接続先OS内のユーザー名@接続先IPアドレス
ssh -i my-key.pem ec2-user@13.112.0.1
SSH通信の認証手順
-
ざっくりいうと以下の手順
→認証のためのキーペアを作成して、その片方をEC2インスタンスに保管する。認証時に、キーペア保有者じゃないとわからない情報をクライアント側とEC2インスタンス側で突合する。 -
具体的に、下記「A.準備・鍵の配置」「B.インスタンス生成」「C.ログイン」の3ステップに分けて見ていく。
A.準備・鍵の配置
- 初めに、認証のためのキーペア(秘密鍵・公開鍵)を生成しておく。
- 各キーを接続元(自端末側)と接続先(AWS側)に保管しておく。
この鍵達が認証のために必要となる。
①キーペア生成
- 秘密鍵と公開鍵を生成する。
②秘密鍵のダウンロード
- 秘密鍵は生成と同時にローカルにダウンロードされる。
③公開鍵の設置
- 公開鍵は生成と同時にRegionに設置される。以降Region側で保管される。
B.インスタンス生成
- EC2インスタンスを生成し、①にて生成した公開鍵をEC2インスタンスにコピーする。
④EC2インスタンスを生成する。
- 生成後は、セキュリティグループのインバウンドルールで、接続予定の端末からの22番ポート(SSH)接続を許可しておく。
(そもそもこのポートを開けとかないと認証プロセスに入る前にセキュリティグループから拒絶される)
⑤公開鍵の複製
- インスタンス生成時に③で保管した公開鍵を使用するか選択できる。
選択すると、EC2に公開鍵がコピーされる。
C.ログイン
- いよいよ認証プロセス。
EC2インスタンス側が、ランダムで生成したデータを暗号化してクライアント側に送る。
クライアント側はそれを復号してハッシュ化する。
EC2インスタンスがクライアントからハッシュ化したものを受け取り、予め自分で同ランダムデータをハッシュ化したものと突合。同一だったら認証OK。同一じゃなかったら認証NG。
⑥SSH接続開始
- 自端末側(SSHクライアント側という)からEC2インスタンス(SSHサーバーという)に、「接続させてほしいよ〜」とお願いする。
⑦ランダムデータ生成
- EC2インスタンスは、「ふむふむ、それではお前は信用に足る者か見極めようじゃないか」と、認証試験を課す(チャレンジ)。
まず、EC2インスタンス側でランダムデータを生成する。
⑧ハッシュ化
- ランダムデータを元に、ハッシュ値を生成する。
これは、後に使う答え合わせ用の解答のようなもの。EC2インスタンス側で控えておく。
⑨暗号化
- ⑦で作ったランダムデータを、公開鍵で暗号化する。
暗号化したデータを、お願いしてきたSSHクライアントに送りつける。
⑩復号化
- SSHクライアント側は、データを受け取った後、②にて保持していた秘密鍵を使って復号化する。
→ここがミソ!
キーペアの片側(公開鍵)で暗号化したデータは、もう片側(秘密鍵)の持ち主にしか復号することができない。
復号化できないということは、これ以降の認証プロセスに進めないということ。
逆に言えば、この関門を突破できたということは、「僕はあの時作ったキーペアの片側を持っている人ですよ〜。秘密鍵って一人しかもっていないでしょ〜」と証明できる。
⑪ハッシュ化
- 複合したデータを元にハッシュ値を生成する。
ハッシュ元が同一の値だったら、ハッシュ化後の値も同じになる。
なので、ここでハッシュ化した値は⑦と同じ値になるはず。
⑫認証
- ⑪でハッシュ化した値をEC2インスタンスに送る。(レスポンス)
- EC2インスタンスは、送られてきたハッシュ値と⑧にて生成したハッシュ値を比較する。(答え合わせ)
- 一致した場合、「お前はわしが認めたものじゃな」判定をする(認証OK)。
これで晴れてSSHクライアントはEC2インスタンスのOSに接続することができる。 - 一致しない場合は「出直してこい」判定をする。(認証NG)
まとめ
- 以上、「SSHとは」「SSH手順の認証手順」でした。
当該記事で記載した内容の小テストを作ってみました。知識をアウトプットして見たい方はご活用ください。
(1)SSHとtelnetの違いはなにか?
(2)SSH通信により何が操作できる?
(3)キーペア生成時、秘密鍵はどこに配置される?また、公開鍵はどこに配置される?
(4)SSH通信が許可されるために、接続先EC2インスタンスの何番ポートを開いておく必要がある?
(5)認証リクエスト時、EC2インスタンス側は何と何の情報を突合して認証OKにするか確認する?
(6)EC2インスタンスが公開鍵で暗号化したデータは、誰ならみることができる?


