CentOS 7に公開鍵認証方式でSSHログインする方法

投稿者 : OSCA

[PR] "東野・岡村の旅猿"で登場したロケ地を紹介するファンサイト「あの場所へ行こう!」はこちら。

 本稿では、CentOS 7 のマシンに SSH でログインする際のログイン方式を公開鍵認証方式に変更する方法について解説します。

公開鍵認証方式の仕組み

 具体的な手順を説明する前に「公開鍵暗号方式」の仕組みについて簡単に解説します。 公開鍵暗号方式は「秘密鍵」と「公開鍵」という2つの鍵を利用した暗号方式です。 秘密鍵は決して漏らしてはいけない大切な鍵である一方、公開鍵は複製して配っても良い鍵です。この2つの鍵には、とても重要な次の特徴があります。

公開鍵暗号方式の特徴

  • 秘密鍵で封をしたものは、公開鍵で開くことができる。
  • 公開鍵で封をしたものは、秘密鍵で開くことができる。

 SSH の公開鍵認証方式ではこの特徴を利用します。 あらかじめサーバー(CentOS 7)に公開鍵を渡しておいて、SSH接続時には秘密鍵を利用してログインします。 CentOS 7 さんに「僕の公開鍵を渡しておくね。 僕は秘密鍵を持っているからね。 公開鍵とペアである僕の秘密鍵でログインしようとした時だけ、ログインを許可してね」と教えるわけです。

手順

 CentOS 7 には標準で OpenSSH というソフトウェアがインストールされており、その OpenSSH に含まれるSSHデーモン (sshd) がSSH接続を待ち受けています。 その OpenSSH に公開鍵を教えることが手順となります。

  1. 接続元となるコンピュータで鍵ペア(秘密鍵,公開鍵)を生成する。
  2. 生成した公開鍵を 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 の認証方式を公開鍵認証方式にする方法について解説しました。

CentOS 7のトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca