【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-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」など名前を付けて保存後、ファイルをダブルクリックすると自動的にリモートサーバーにログインします。

 

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

 

 

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人

コメントを残す

メールアドレスが公開されることはありません。