この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
はじめに
お仕事で公開鍵認証接続が必要になったため、「公開鍵認証」についてまとめる。
公開鍵認証について
「公開鍵認証」とは、「公開鍵」と「秘密鍵」という2種類の鍵のペア(キーペア)を用いて認証を行う方式。
方法として、ユーザは事前に踏み台サーバなどでキーペアを作成し、そこで作成された公開鍵を踏み台サーバからログインしたいサーバーに配置することで「公開鍵認証」を行うことができる。
具体的なログインの流れについては、踏み台サーバにて自身の秘密鍵を用いて署名を作成、その後ログインしたい対象サーバーへ署名を送信する。署名を受け取ったサーバは、配置しているペアの公開鍵を利用して署名を検証し、検証が成功した場合ログインを許可するという仕組み。
公開鍵認証はパスワード認証とは異なり、認証に必要な秘密情報はネットワークに送出されない。及び、認証に利用される署名は一時的なので、署名自体が盗聴されても問題はない。
そのためパスワード認証に比べ、通信の盗聴に強く、秘密鍵を推測して偽造することは非常に困難であるため、パスワード認証よりもセキュリティレベルを上げることができる。
構成
構成図
構築
今回の構築ではBastion(Windows)からアクセスされるサーバ(AmazonLinux2)へ公開鍵認証でアクセスできるようにする
1.SSH公開鍵認証接続設定作業
1.1.Bastion側(Windows):キーペアを作成
Bationサーバ側のコマンドプロンプトより公開鍵と秘密鍵の生成
C:\Users\Administrator>ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\Administrator/.ssh/id_rsa):
Created directory 'C:\Users\Administrator/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\Administrator/.ssh/id_rsa.
Your public key has been saved in C:\Users\Administrator/.ssh/id_rsa.pub.
※生成時「キーの保存場所の指定」を聞かれるが今回指定なし
※生成時「パスフレーズの設定」を聞かれるが今回指定なし
1.2.公開鍵をクセスされるサーバ(AmazonLinux2)サーバに配置
1.2.1.Bastion側(Windows):公開鍵の内容をクリップボードにコピー
公開鍵をクライアントサーバにコピーするため、以下のコマンドを使用して公開鍵の内容をクリップボードにコピー
type %USERPROFILE%\.ssh\id_rsa.pub | clip
1.2.2.アクセスされるサーバ側(AmazonLinux2):公開鍵を配置
アクセス先となるクライアントサーバの~/.ssh/.ssh/authorized_keys
に追加
$ echo 'ここにクリップボードの内容をペースト' >> ~/.ssh/authorized_keys
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
挙動の確認
1.Bastion(Windows)から公開鍵認証を使用してアクセスされるサーバ(AmazonLinux2)に接続
1.1.下記コマンドで公開鍵認証によるアクセス
ssh -i %USERPROFILE%\.ssh\id_rsa ec2-user@XXX.XXX.XXX.XXX
, #_
~\_ ####_ Amazon Linux 2
~~ \_#####\
~~ \###| AL2 End of Life is 2025-06-30.
~~ \#/ ___
~~ V~' '->
~~~ / A newer version of Amazon Linux is available!
~~._. _/
_/ _/ Amazon Linux 2023, GA and supported until 2028-03-15.
_/m/' https://aws.amazon.com/linux/amazon-linux-2023/�
※ XXX.XXX.XXX.XXX 部分はアクセスされるサーバのプライベートIPアドレスを記載
※AWSにおける、SG、NACL等のネットワークについては通信できるものとする
さいごに
作業自体に問題はありませんでしたが、自分の理解としてなぜ「公開鍵」を渡すことでログインができるのかという部分で、署名を利用しているなどは新しい発見でした。
なんでできるのかをブラックボックスで鵜呑みせず、少しずつでも自分が理解して構築などはしていきたいです。