サーバーのSSH設定について、パスワード認証を不可とし、鍵認証のみを可とする接続設定の手順を備忘録としてまとめておく。

鍵認証の設定手順

鍵認証の設定には、クライアントPC側とサーバー側でそれぞれ別の設定をおこなう必要がある。

まず、クライアント側から設定を開始する。

クライアント側

キーペアの作成

まず、ssh-keygenコマンドで公開鍵・秘密鍵のキーペアを作成する。

# sshディレクトリへ移動
cd ~/.ssh/

# ssh-keygenでキーペア作成
ssh-keygen -t rsa -b 4096

オプションの「-t」では暗号化形式を、「-b」では作成する鍵のビット数を指定する。

サーバーへ公開鍵を設置する

ssh-keygenを実行すると、特にファイル名に指定をしない限り以下二つのファイルが作成される。

  • id_rsa
  • id_rsa.pub

id_rsa.pubが公開鍵になるので、このファイルをサーバーの任意のディレクトリへ設置する。
※ここではサーバー側の「/home/user」ディレクトリへ設置するものとする。

ファイルを設置する際はFileZillaなどのFTPクライアントツールで、パスワード認証のSFTP接続を利用しファイルを転送するとよい。

サーバー側

ここからはサーバー側の設定となる。

.sshディレクトリを作成する

まず、公開鍵を設置する.sshディレクトリをユーザーのホームディレクトリへ作成する。

# ユーザーディレクトリへ移動
cd /home/user

# .sshディレクトリを作成
mkdir .ssh

# パーミッションを700に設定
chmod 700 .ssh

パーミッションの変更を忘れずに!

公開鍵の作成

作成した.sshディレクトリ内にauthorized_keys(公開鍵)を作成し、id_rsa.pubの内容を転記する。

# 公開鍵ファイルの作成
touch .ssh/authorized_keys

# クライアント側から転送された公開鍵をauthorized_keysに追加
cat id_rsa.pub >> .ssh/authorized_keys

# パーミッションを600に変更
chmod 600 .ssh/authorized_keys

ここでもパーミッションの変更を忘れないようにする。

※注意点

サーバー側でおこなう一連の作業をrootユーザーとして実行すると、公開鍵の所有者がrootになってしまい、ログインに失敗してしまうので注意する必要がある。
必ず対象のユーザーで作業をおこなうようにしよう。

sshd_configの設定変更

最後にsshd_configファイルの設定内容を下記のとおり変更する。

vim /etc/ssh/sshd_config

# 下記に変更

# 公開鍵認証を有効にする
PubkeyAuthentication yes

# パスワード認証を無効にする
PasswordAuthentication no

# ルートユーザーでのログインを無効にする
PermitRootLogin no

# SSHプロトコルをバージョン2に限定する
Protocol 2

最後にsshdサービスを再起動すれば作業完了だ。

systemctl restart sshd