CentOS 7でSSHの認証を公開鍵認証で行う方法
初めに
パスワード認証でSSH接続する方法をこちらで紹介しました。しかし、第三者がアクセスできるシステムでパスワード認証するのはセキュリティ上望ましくないので、公開鍵認証を用いてSSH認証する方法を紹介します。
環境
- クライアント:Windows 10 Home
- サーバー:CentOS 7.5.1804 64bit Minimal
前提条件
- openssh-serverがインストールされていること
- sudoできるユーザーでログインしていること
クライアント側の作業
鍵ペアの作成
公開鍵と秘密鍵のペアを作成します。Macを使用している場合はターミナルから、Windowsの場合はGit bashから作成します。
秘密鍵と公開鍵はサーバー側でも作成することができますが、秘密鍵をクライアント側に転送する際に秘密鍵が漏れてしまう危険性があるためクライアント側で作成するのが望ましいです。
鍵ペアはssh-keygenコマンドで作成することができます。
公開鍵暗号方式では主にRSA暗号が使用されるため、RSA鍵を作成します。また、鍵のサイズは2048bit以上の強度を持っている鍵ならば問題ないですが、より強固な鍵を生成するために今回は4096bitで作成します。
$ ssh-keygen -t rsa -b 4096
- -tオプション:作成する鍵の種類を指定します。
- -bオプション:作成する鍵のサイズを指定します。
- -fオプション:作成した鍵の保存場所を指定します。指定しないと/c/Users/[ユーザー名]/.ssh/に作成されます。
-fオプションで保存場所を指定しない場合デフォルトのパスでいいか聞かれるので、よければEnterキーを押して次に進みます。
Enter file in which to save the key (/c/Users/[ユーザー名]/.ssh/id_rsa):
パスフレーズの入力を求められるので、パスフレーズを2回入力します。このパスフレーズは秘密鍵でSSHログインする際に必要になります。
Enter passphrase (empty for no passphrase): Enter same passphrase again:
公開鍵のアップロード
まず、秘密鍵(id_rsa)と公開鍵(id_rsa.pub)が指定した場所に生成されているか確認します。
確認ができたらサーバへ公開鍵を転送します。転送する方法は何でも構いませんが、今回はscpを使用して/tmpフォルダにアップロードします。
$ scp ~/.ssh/id_rsa.pub [ユーザー名]@[ホスト名]:/tmp
サーバー側の作業
SSHの設定
SSHの設定ファイルを下記のように編集します。(SSHで接続して作業している場合は、先に公開鍵の登録を行ってください)
$ sudo vi /etc/ssh/sshd_config
#rootユーザのログインを許可するか PermitRootLogin no #パスワード認証を許可するか PasswordAuthentication no #パスワードなしを許可するか PermitEmptyPasswords no
設定の反映
起動している場合は再起動します。
$ sudo systemctl restart sshd
起動していない場合は起動させます。
$ sudo systemctl start sshd
起動しているか確認します。
$ sudo systemctl status sshd
active (running)と表示されていれば、起動しています。
自動起動を有効にしていない場合は自動起動を有効化します。
$ sudo systemctl enable sshd
公開鍵の登録
転送した公開鍵を登録します。公開鍵は~/.ssh/authorized_keysに書き込むことで登録することができます。
~/.ssh/が存在しない場合はまず作成します。
$ mkdir ~/.ssh
~/.ssh/authorized_keysに鍵の内容を書き込みます。鍵は複数登録することもできるのでmvではなくcatで書き込みます。
$ cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
/tmpに保存したファイルを削除します。
$ sudo rm /tmp/id_rsa.pub
鍵へのアクセス権を変更して、ログインしているユーザ以外のアクセスを禁止します。
$ chmod 700 ~/.ssh/ $ chmod 600 ~/.ssh/authorized_keys
クライアントからの接続
$ ssh -i ~/.ssh/id_rsa [ユーザー名]@[ホスト名]
- -iオプション:公開鍵とペアになっている秘密鍵を指定します。
パスフレーズの入力を求められるので、鍵の作成時に設定したパスフレーズを入力してEnterキーを押します。
Enter passphrase for key '/c/Users/[ユーザー名]/.ssh/id_rsa':