0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SSH通信によるECインスタンス内OSへのログイン方法

0
Posted at

目次

以下構成で記載しています。

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側)に保管しておく。
    この鍵達が認証のために必要となる。

1.jpg

①キーペア生成

  • 秘密鍵と公開鍵を生成する。

②秘密鍵のダウンロード

  • 秘密鍵は生成と同時にローカルにダウンロードされる。

③公開鍵の設置

  • 公開鍵は生成と同時にRegionに設置される。以降Region側で保管される。

B.インスタンス生成

  • EC2インスタンスを生成し、①にて生成した公開鍵をEC2インスタンスにコピーする。

B.インスタンス生成.jpg

④EC2インスタンスを生成する。

  • 生成後は、セキュリティグループのインバウンドルールで、接続予定の端末からの22番ポート(SSH)接続を許可しておく。
    (そもそもこのポートを開けとかないと認証プロセスに入る前にセキュリティグループから拒絶される)

⑤公開鍵の複製

  • インスタンス生成時に③で保管した公開鍵を使用するか選択できる。
    選択すると、EC2に公開鍵がコピーされる。

C.ログイン

  • いよいよ認証プロセス。
    EC2インスタンス側が、ランダムで生成したデータを暗号化してクライアント側に送る。
    クライアント側はそれを復号してハッシュ化する。
    EC2インスタンスがクライアントからハッシュ化したものを受け取り、予め自分で同ランダムデータをハッシュ化したものと突合。同一だったら認証OK。同一じゃなかったら認証NG。

C.ログイン.jpg

⑥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インスタンスが公開鍵で暗号化したデータは、誰ならみることができる?
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?