本稿では、CentOS 7 のマシンに SSH でログインする際のログイン方式を公開鍵認証方式に変更する方法について解説します。
公開鍵認証方式の仕組み
具体的な手順を説明する前に「公開鍵暗号方式」の仕組みについて簡単に解説します。 公開鍵暗号方式は「秘密鍵」と「公開鍵」という2つの鍵を利用した暗号方式です。 秘密鍵は決して漏らしてはいけない大切な鍵である一方、公開鍵は複製して配っても良い鍵です。この2つの鍵には、とても重要な次の特徴があります。
公開鍵暗号方式の特徴
- 秘密鍵で封をしたものは、公開鍵で開くことができる。
- 公開鍵で封をしたものは、秘密鍵で開くことができる。
SSH の公開鍵認証方式ではこの特徴を利用します。 あらかじめサーバー(CentOS 7)に公開鍵を渡しておいて、SSH接続時には秘密鍵を利用してログインします。 CentOS 7 さんに「僕の公開鍵を渡しておくね。 僕は秘密鍵を持っているからね。 公開鍵とペアである僕の秘密鍵でログインしようとした時だけ、ログインを許可してね」と教えるわけです。
手順
CentOS 7 には標準で OpenSSH というソフトウェアがインストールされており、その OpenSSH に含まれるSSHデーモン (sshd) がSSH接続を待ち受けています。 その OpenSSH に公開鍵を教えることが手順となります。
- 接続元となるコンピュータで鍵ペア(秘密鍵,公開鍵)を生成する。
- 生成した公開鍵を CentOS 7 のマシンに登録する。
それでは、それぞれの手順について解説します。
1. 接続元となるコンピュータで鍵ペアを生成する
1-1. macOS で鍵ペアを生成する方法
macOS には標準で OpenSSH がインストールされており、鍵ペアを生成するための ssh-keygen コマンドが利用できます。 この ssh-keygen
コマンドを利用して鍵を作る手順を方法について解説します。
OpenSSH の鍵は、コンピュータのログインユーザーのホームディレクトリ直下の .ssh
ディレクトリに保存するのがルールになっています。 具体的には /Users/[ユーザーID]/.ssh
というディレクトリです。
まずは .ssh ディレクトリの存在を確認して、もしディレクトリが無ければ作成します。 また .ssh ディレクトリのアクセス権限は 700 である必要があります。 (秘密の鍵を置くディレクトリですので、他のユーザーが覗けては意味がありませんからね)
$ cd ~/
$ mkdir .ssh
$ chmod 700 .ssh
鍵を設置する .ssh ディレクトリに移動し、秘密鍵(id_rsa)と公開鍵(id_rsa.pub)がまだ無いことを確認してください。 確認できたら、上述の ssh-keygen コマンドを利用して秘密鍵と公開鍵のペアを生成します。
$ cd ~/.ssh
$ ssh-keygen
鍵ペアの生成が完了したら ls コマンドを実行してみると、id_rsa と id_rsa.pub という2つのファイルが生成されたことが確認できます。 id_rsa が秘密鍵、id_rsa.pub が公開鍵です。
ポイント
- id_rsa : 秘密鍵
- id_rsa.pub : 公開鍵
これで macOS での秘密鍵と公開鍵のペアの生成は完了です。
2. CentOS 7 に公開鍵を登録する
上で生成した鍵ペアのうち、公開鍵を CentOS 7 のマシンに登録します。 公開鍵認証方式でログインすることを許可したい CentOS 7 のユーザーでログインして作業を行います。
OpenSSH では、信頼できる公開鍵をユーザーのホームディレクトリ配下の .ssh/authorized_keys
というファイルに記述しておくことになっています。 まずはホームディレクトリに .ssh ディレクトリがあることを確認し、もし無ければ作成します。 また、.ssh ディレクトリのアクセス権限は 700 である必要があります。
$ cd ~/
$ mkdir .ssh
$ chmod 700 .ssh
そして .ssh ディレクトリに移動して、authorized_keys
というファイルに公開鍵を記述します。 もし authorized_keys ファイルがない場合は新しく作成してください。 ファイルのアクセス権限は 600 である必要があります。
$ cd ~/.ssh
$ touch authorized_keys
$ chmod 600 authorized_keys
authorized_keys ファイルに公開鍵を記述するわけですが、記述する内容は 1 で生成した公開鍵(id_rsa.pub)ファイルの中身です。 id_rsa.pub には、次のような文字列が書かれていますので、それをそのままクリップボードなどにコピーしてください。
ssh-rsa AAAAX5NzaC1yc2EAAAADAQABAAABAQDjkrnqp8VbBp+1KdHOQmGKzvhdvac5+wJB+I/Lyq51E4la2cX032UbxPrIf2o3wNopW+z4UNewrGTi4VIZvYqaNIj1gEL1LR5Pp3BM1ulk2lDhkDvOk8AK/EShfJXvM4urWIt5soqCiBTREgabef8k3fIDaYWP4ouXzOHWz5jVzojkMdnUYQ7dJM8JHZ4zGhM2QvXRzhJ0151r7ejT7VJkiG+5UKL1tF3KHuvIdGPV2YFEsg3OlOWscK9iYx/G49bh8ISRV2u3OE4bhpGHhEnCwtPo6SQRlNRETZqN1xYGB8C+X18FP/x8JqPdPzPLaRPDR0a3bx+yus3ltwp5UNob osca@macbookpro.local
コピーした文字列を、authorized_keys ファイルの末尾行になるように追記します。 これで公開鍵の登録は完了です。
3. 公開鍵暗号方式で接続する
3-1. macOS から接続する
ここでは macOS の「ターミナル」から CentOS 7 のマシンに SSH 接続する方法を解説します。 「ターミナル」を開き、次のように ssh コマンドに -i オプションで秘密鍵を指定して接続します。
$ ssh -i ~/.ssh/id_rsa user@myhosts.xx.xx
鍵ペアを作成する際にパスフレーズを指定した場合は、そのパスフレーズを聞かれますので入力してください。
4. パスワード認証方式を禁止する
公開暗号方式で SSH 接続ができるようになったら、従来のパスワード認証方式を禁止すると良いでしょう。 パスワード認証は「パスワード総当たり攻撃」を試みられたりすることがあるので、公開鍵暗号方式よりも危険です。
CentOS 7 の sshd の設定は /etc/ssh/sshd_config
ファイルに記述されています。 この sshd_config ファイルのうち、PasswordAuthentication
の設定を no
にすることでパスワード認証をしないようにできます。
PasswordAuthentication no
設定ファイルを修正したら sshd を再起動して設定を有効にすることを忘れないでください。
# systemctl restart sshd
おわりに
本稿では CentOS 7 の SSH の認証方式を公開鍵認証方式にする方法について解説しました。