公開鍵認証接続構築ハンズオン


この記事は公開されてから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等のネットワークについては通信できるものとする

さいごに

作業自体に問題はありませんでしたが、自分の理解としてなぜ「公開鍵」を渡すことでログインができるのかという部分で、署名を利用しているなどは新しい発見でした。
なんでできるのかをブラックボックスで鵜呑みせず、少しずつでも自分が理解して構築などはしていきたいです。

Last modified: 2023-09-30

Author