秘密鍵と公開鍵を使って鍵認証設定の仕方について

f:id:daikiyano:20181220142224j:plain
今回、公開鍵認証の仕方についてご紹介したいと思います。
エンジニア職に就いて最初にやるのがコーティングではなく、鍵認証ではないでしょうか?笑
よりセキュアなやり方があれば、教えていただけると幸いです。

また、公開鍵認証をするにはUNIXコマンドの基本的な操作が必要になります。

ドットインストールの「UNIXコマンド入門」は分かりやすいので、コマンドの操作方法を学習されたい方にはおすすめですので是非利用してみてください。

https://dotinstall.com/lessons/basic_unix_v2

パスワード認証と公開鍵認証

f:id:daikiyano:20181220113506p:plain
画像出典:「よく分かる公開鍵認証」~初心者でもよくわかる!VPSによるWebサーバー運用講座(2) | さくらのナレッジより引用

サーバーにアクセスするやり方として主にパスワード認証と公開鍵認証があります。
パスワード認証の場合、ログインするのが容易でパスワードを知っている人であれば、どのパソコンからでもアクセスすることが可能です。
しかしながら、悪意のある第三者よって総当たり攻撃をされた際にサーバーに不正アクセスされる可能性があり、パスワードはセキュリティ上あまりよろしくありません。そのパスワード認証に代わって使用するのが公開鍵認証です。

PCで鍵を生成する際に
id_rsa.pub(公開鍵)とid_rsa(秘密鍵)が作成されます。

  • id_rsa.pub(公開鍵)
  • id_rsa(秘密鍵)

公開鍵はサーバー側で保管する鍵で基本的には「authorized_keys」という名前に変更して保存します。
秘密鍵はクライアント側で保管し、第三者には絶対に誰にも渡してはいけない鍵です。

公開鍵認証をすることにより、秘密鍵を持っているPCに対してのみ接続を許可するので、鍵を持っていないパソコンからはログインすることができなくなります。
よって、セキュリティが向上します。

公開鍵認証をやってみたよ。

まずは、クライアント側からサーバーにパスワード認証を用いてリモートログインをします。
サーバーを直接触れる場合は、サーバーで直接操作をします。

$ ssh [ログインユーザID]@[サーバアドレス]
例:$ ssh kusangai@example.com

公開鍵と秘密鍵を作成。

サーバー側で鍵を生成するために以下を実行します。
鍵を生成する際にパスワードを聞かれますが、こちらはパスワードを設定してもしなくてもどちらでも構いません。

$ ssh-keygen -t rsa
Enter file in which to save the key (/Users/username/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/username/.ssh/id_rsa.
Your public key has been saved in /Users/username/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:x++c1jsf2KeByKc4A/S7dfedxcswRyZz7LpbkFCl4 username@usernameMacBook-puro.local
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|                 |
|      o o.o      |
|     ..BE*+      |
|     .=o=o*+ooo  |
|     +.+.B O*o.o.|
|      o B B=..ooo|
|       ..=oo+ o+.|
+----[SHA256]-----+

公開鍵の設定

続いて公開鍵の設定を行います。
cat id_rsa.pub >> authorized_keysで公開鍵をauthorized_keysに書き込みます。
その後、公開鍵(authorized_keys)のパーミッションを600に、.sshフォルダのパーミッションは700に設定します。authorized_keysに公開鍵が書き込まれていることを確認したらrm id_rsa.pubで削除します。

$ cd ~/.ssh/
$ cat id_rsa.pub >> authorized_keys
$ chmod 600 authorized_keys
$ chmod 700 ~/.ssh
$ rm id_rsa.pub

クライアント側で秘密鍵の設定

続いてサーバー側にある~/.ssh/id_rsa(秘密鍵を)クライアント側(自分のPC)に設定します。
設定したら秘密鍵(id_rsa)のパーミッションは600に、.sshフォルダのパーミッションは700に変更します。
また、id_rsaはファイル名を変更できるので、分かりやすい名前に変更します。

$ cd ~/.ssh/
$ chmod 600 id_rsa
$ mv id_rsa [好きな名前]
$ chmod 700 ~/.ssh

これで、鍵認証の設定は完了です。
最後にsshコマンドを使ってサーバーに接続してみます。

$ ssh –i ~/.ssh/[鍵の名前] [ログインユーザID]@[サーバアドレス]
例:$ ssh -i ~/.ssh/example_server kusanagi@example.com

私の場合、kusanagiを使っているのでこんな画面が表示されて鍵認証を使ってサーバーにアクセスすることが出来ました。

Last login: Thu Dec 20 11:26:12 2018 from nat1.example.jp
__ ____  _______ ___    _   _____   __________
/ //_/ / / / ___//   |  / | / /   | / ____/  _/
/ ,< / / / /\__ \/ /| | /  |/ / /| |/ / __ / /
/ /| / /_/ /___/ / ___ |/ /|  / ___ / /_/ // /
/_/ |_\____//____/_/  |_/_/ |_/_/  |_\____/___/
Version 8.4.2-1, Powered by Prime Strategy.

最初は、イメージが湧かず苦戦するかも知れませんが、是非トライしてみてください。
もし、何か間違えている点がありましたらご指摘していただけると幸いです。

参考サイト

https://qiita.com/nnahito/items/dbe6fbfe347cd66ae7e6

用語解説辞典|【公式】NTTPC

「よく分かる公開鍵認証」~初心者でもよくわかる!VPSによるWebサーバー運用講座(2) | さくらのナレッジ

最新情報をチェックしよう!
>文系エンジニア大学生の技術ブログ

文系エンジニア大学生の技術ブログ

社会が多様化していく中、大学生の学生生活も多様であるべきと考えています。主にエンジニア向けにITやプログラミングなどの技術系と大学生向けに休学、留学、海外生活、トビタテ留学、長期インターンに関する記事を書いています。