【Linux】SSH 公開鍵認証の設定手順【図解】

作業をする際は SSH でサーバーにアクセスをしますが、認証は基本的に「公開鍵認証」を使用しています。

完全ローカル環境の場合は「パスワード認証」にすることもありますがパスワード認証はいつかはクラッキングされるのではという不安があります。

 

 

 

公開鍵認証方式だと何が安全なのか?

「パスワード認証」はとにかくパスワードがバレたら終わりです。

しかし「鍵認証」方式の場合は

  • パスフレーズをクラッキングされたとしても、鍵ファイルを盗まれなければセーフ
  • 鍵ファイルを盗まれても、パスフレーズをクラッキングされなければセーフ

という二重の安心があります。

 

ようは、物理的にファイルさえ盗まれなければ、最悪指の動きからパスフレーズを盗まれたとしてもセキュリティは担保されます。

 

 

 

 

SSH 公開鍵認証方式の図解

時々どのような構成になっていたのかすぐに出てこない場合があるので図解にしてみました。

ちなみに以下の図を見ると確実に SSH 公開鍵認証の構成が思い描けるので、SSH の設定で迷ったら何度も見てほしいと思います。

 

今回は SSH クライアントが Windows なのでサーバー側で ssh-keygen コマンドを使って「鍵(公開鍵・秘密鍵)」を作ります。

【Linux】SSH 公開鍵認証の設定手順【図解】

 

 

タマちゃん
あれ?普通、クライアント側で公開鍵を作ってサーバーに送るよね?

 

山ちゃん
うん。でも今回は Windows だからサーバー側で公開鍵を作るよ。

 

タマちゃん
よくよく考えてみるとなぜだろう?

 

実は

  • サーバー側で「鍵(公開鍵・秘密鍵)」を作ってもOK
  • クライアント側で「鍵(公開鍵・秘密鍵)」を作ってもOK

です。

 

しかし通常サーバー側で「鍵(公開鍵・秘密鍵)」を作成します。

 

 

 

サーバー側で「鍵(公開鍵・秘密鍵)」を作成する場合

その理由はサーバーにアクセスするクライアントが多数いる場合、「管理が効率的で楽」だからです。

1つだけ「鍵」を作ればOKです。

そして「公開鍵」をクライアントに配れば作業完了です。

クライアントが増えたとしてもすでにある「公開鍵」を配ればOKです。

【Linux】SSH 公開鍵認証の設定手順【図解】

 

 

 

 

クライアント側で「鍵」を作る場合

クライアントごとに「鍵」を作成してサーバーに「公開鍵」を配る方式です。

クライアントの数が増えると管理が大変、というか管理できなくなります。

 

サーバー上に置く公開鍵も増えますし、どの鍵がどのクライアントなのかもそのうち分からなくなるでしょう。

セキュリティ的にも危険です。

【Linux】SSH 公開鍵認証の設定手順【図解】

 

しかし今回はサーバーにアクセスするクライアントが1台のみ、クライアントは「Windows」「ssh-keygen」コマンドが使えないのでクライアントで作成します。

※「Teraterm」や「PuTTY」などでクライアント側から簡単に鍵を作成することができますが、今回はその方法を取りませんでした。

 

 

 

 

クライアント側とサーバ側のどちらに秘密鍵を配置するのか

先ほど鍵を作るのは「サーバ側」「クライアント側」のどちらでも可能という話をしましたが、では、「クライアント側」と「サーバ側」のどちらに秘密鍵を配置するのか正解なのでしょうか?

そもそも SSH で鍵認証を使うということは、公開鍵認証(公開鍵認証方式)を使うということです。

公開鍵認証では以下の2つの鍵を利用します

  • 公開鍵(Public Key)
  • 秘密鍵(Private Key)

 

どちらに秘密鍵を配置し、どちらに公開鍵を配置するかは、「どちら側を認証したいのか?」によって変わってきます。

一般的な企業の場合は、データセンターにWebサーバーやAPサーバーやDBサーバーを置いています。(最近はクラウドに置いているケースが多くなっていますが。)

メンテナンスの為にエンジニアがサーバーにログインして作業をします。

この場合は、「このWebサーバーは本物だろうか?認証してもいいだろうか?」という発想にはなりません。

むしろWebサーバー側の方が「このクライアントは本当に従業員のエンジニアからのアクセスなんだろうか?いつもとIPアドレスが違うし、アクセス元の場所も本社ではないような気がするけど信用してもいいだろうか?」という発想になります。

 

その為、クライアント側に「秘密鍵」を配置し、サーバー側に「公開鍵」を配置する形になります。

ただ、思ったのが、「鍵の配置を逆にするとどうなるのか?」です。

 

 

 

【逆の場合】クライアント側に公開鍵を配置し、サーバー側に秘密鍵を配置した場合

クライアント側に公開鍵を配置し、サーバー側に秘密鍵を配置した場合です。

一応これでも「暗号化」はできそうです。

でもサーバー側に「秘密鍵」があるということは、「公開鍵」は複数のクライアント側に配布されていると思うので簡単に入手できそうです。

簡単に「公開鍵」が入手できると結局サーバにアクセスできてしまうので、やはり一般的な企業の場合はクライアントPC側に秘密鍵を配置して、公開鍵をサーバーに配布する形になるのかなと思います。

 

 

 

SSHはクライアント側に秘密鍵、サーバー側に公開鍵を配布する

SSHの場合は、以下の形式が良さそうです。

  • クライアント側 ← 秘密鍵を配置
  • サーバー側 ← 公開鍵を配置

 

 

 

SSL/TLS通信の場合はサーバー側に秘密鍵を配置する

SSHではなく、SSL/TLS 通信の場合は、インターネット経由でお客様がWebサーバーにログインしてクレジットカード情報などを入力するのでサーバー側に秘密鍵を配置し、公開鍵をクライアント側に配布します。

近年はフィッシングサイトによるクレジットカード情報やパスワード情報を詐取するケースが多いので、本当にこのサーバーを信用してもいいのかを判断するための「サーバー証明書」をサーバーに配置しています。

サーバーだけでなくクライアント側も信用してもいいのか判断するために「クライアント証明書」を配置するケースもあります。

 

 

 

 

お客様から鍵認証でつながらないと連絡があったが、この場合はどっちか?

では、突然お客様より電話が掛かってきて「鍵認証でつながらないんだけど、どうなってるの?」と連絡が来たとしましょう。

この場合、クライアント側に秘密鍵を配置しているのか?サーバー側に秘密鍵を配置しているのでしょうか?

正解は「この情報だけでは分からないのでお客様にヒアリングをする必要がある」です。

 

以下の情報が入手できればある程度原因を推測できそうです。

  • どこからどこにアクセスしようとしているのか?(ホスト名、IPアドレス)
  • どのサービスを使っているのか?(HTTPS?SSH?FTP?)
  • 鍵をどのように配置しているのか?どのファイルなのか?

 

 

 

 

 

今回の場合(サーバー側で鍵を作る方法)の構成図

今回の場合は下図のようになります。

サーバー側で「ssh-keygen」コマンドを使って鍵(公開鍵・秘密鍵)を作成します。

作成したら公開鍵の中身を「authorized_keys」に入れて、秘密鍵は SSH クライアントである Windows マシンに保存します。

【Linux】SSH 公開鍵認証の設定手順【図解】

 

以下、サーバー側でのコマンドです。

アカウントは「test」アカウントです。

[test@SAKURA_VPS ~]$ mkdir ~/.ssh
[test@SAKURA_VPS ~]$ ls -la
合計 40
drwx——   7 test test 4096  9月 23 14:01 .
drwxr-xr-x. 10 root root 4096  6月 16 21:27 ..
-rw——-   1 test test  570  9月 19 01:04 .bash_history
-rw-r–r–   1 test test   18 12月  7  2016 .bash_logout
-rw-r–r–   1 test test  193 12月  7  2016 .bash_profile
-rw-r–r–   1 test test  297  9月 17 14:22 .bashrc
drwxrwxr-x   3 test test   17  9月 17 14:17 .cache
drwxrwxr-x   3 test test   17  9月 17 14:17 .config
drwxr-xr-x   4 test test   37  1月 30  2017 .mozilla
drwxrw—-   3 test test   18  9月 17 22:44 .pki
drwxrwxr-x   2 test test    6  9月 23 14:01 .ssh
-rw——-   1 test test  883  9月 17 14:22 .viminfo

[test@SAKURA_VPS ~]$ chmod 700 ~/.ssh/
[test@SAKURA_VPS ~]$ cd ~/.ssh/
[test@SAKURA_VPS .ssh]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/test/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): ← パスフレーズを入力します。
Enter same passphrase again: ← パスフレーズを入力します。
Your identification has been saved in /home/test/.ssh/id_rsa.
Your public key has been saved in /home/test/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:yHrYBj+pACMQvhHMzGVP9D3McdBfW2miXV+xqnUZd5w test@tk2-xxx-xxxxx.vs.sakura.ne.jp
The key’s randomart image is:
+—[RSA 2048]—-+
|*..o.o   oo.   .o|
|.*o o . + o. . *=|
|.o   . . =  + =EO|
|. o  . .  .. o..*|
|+.  . o S    o o |
|.o   * .    o .  |
|  . o B    .     |
|   . + .         |
|    .            |
+—-[SHA256]—–+
[test@SAKURA_VPS .ssh]$ ls
id_rsa  id_rsa.pub
[test@SAKURA_VPS .ssh]$ cat id_rsa.pub >> authorized_keys
[test@SAKURA_VPS .ssh]$ rm id_rsa.pub
[test@SAKURA_VPS .ssh]$ ls -l
合計 8
-rw-rw-r– 1 test test  416  9月 23 14:03 authorized_keys
-rw——- 1 test test 1766  9月 23 14:02 id_rsa
[test@SAKURA_VPS .ssh]$ chmod 600 authorized_keys
[test@SAKURA_VPS .ssh]$ ls -l
合計 8
-rw——- 1 test test  416  9月 23 14:03 authorized_keys
-rw——- 1 test test 1766  9月 23 14:02 id_rsa

[test@SAKURA_VPS .ssh]$

 

この後「id_rsa」を Windows マシンに保存します。

 

 

 

 

Teraterm で SSH 公開鍵認証方式(パフフレーズ付き)でのログインマクロを作る

Teraterm のマクロを使ってワンクリックでログインできるように設定すると日々の運用管理作業が楽になります。

 

【Linux】SSH 公開鍵認証の設定手順【図解】

 

ファイルの中身は以下のようになっています。

;; 接続先サーバ・ユーザ名・鍵・パスフレーズ設定
HOSTADDR = ‘160.xxx.xxx.xxx’  ← IPアドレスもしくはホスト名を設定します。
USERNAME = ‘test’  ← アカウント名を設定します。
KEY_FILE = ‘xxxxxx\key\id_rsa’ ← サーバー上で作った「id_rsa」ファイルを Windows マシンに保存したパスを設定します。
PASSWORD_FILE = ‘xxxxxxxxx\key\passwd.dat’ ← パスワードファイルのパスを指定します。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; パスフレーズを暗号化ファイルにする
getpassword PASSWORD_FILE USERNAME PASSWORD

;; ①コマンド組立て
COMMAND = HOSTADDR
strconcat COMMAND ‘:22 /ssh /2 /auth=publickey /user=’
strconcat COMMAND USERNAME
strconcat COMMAND ‘ /passwd=’
strconcat COMMAND PASSWORD
strconcat COMMAND ‘ /keyfile=’
strconcat COMMAND KEY_FILE

 

;; ②サーバ接続
connect COMMAND

;; ③マクロ終了
end

 

 

上記内容を「さくらVPS.ttl」など名前を付けて保存後、ファイルをダブルクリックすると自動的にリモートサーバーにログインします。

 

非常に便利なので試してみてください。

 

 

 

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください