今回、公開鍵認証の仕方についてご紹介したいと思います。
エンジニア職に就いて最初にやるのがコーティングではなく、鍵認証ではないでしょうか?笑
よりセキュアなやり方があれば、教えていただけると幸いです。
また、公開鍵認証をするにはUNIXコマンドの基本的な操作が必要になります。
ドットインストールの「UNIXコマンド入門」は分かりやすいので、コマンドの操作方法を学習されたい方にはおすすめですので是非利用してみてください。
https://dotinstall.com/lessons/basic_unix_v2
パスワード認証と公開鍵認証
画像出典:「よく分かる公開鍵認証」~初心者でもよくわかる!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.
最初は、イメージが湧かず苦戦するかも知れませんが、是非トライしてみてください。
もし、何か間違えている点がありましたらご指摘していただけると幸いです。
参考サイト