【Linux】 SSH公開鍵認証方式

  ■ 公開鍵認証とは

 * 秘密鍵と公開鍵という鍵ペアを使用する認証方式
 * 公開鍵認証では、パスワードを入力しないため、パスワードがネットワーク上を流れることがないため、
   パスワードの盗難や推測などの攻撃を防ぐことができる
  => 逆に鍵が盗まれたらアウト

 

  ■ 手順概要

【1】 クライアント用の秘密鍵/公開鍵の生成
【2】 sshd_configの設定
【3】 ファイアウォールの確認
【4】 クライアントに秘密鍵を渡し、サーバ側にSSH接続する

  【1】 クライアント用の秘密鍵/公開鍵の生成

クライアント用の秘密鍵/公開鍵の生成(本来、クライアントで行うべき)
ssh-keygen -t rsa -b 4096 -C "your_email@gmail.com"

# t "鍵の種類"
# -b "鍵の長さ"
# -C "コメント文(e-mailを入力)"

Enter file in which to save the key (/home/user_id/.ssh/id_rsa): (鍵ファイルの設定場所。Enterキー押下)
Enter passphrase (empty for no passphrase): (パスフレーズ入力 以下の「★ パスフレーズについて ★」を参照)
Enter same passphrase again: (同じパスフレーズ再入力)

★ パスフレーズについて ★
 a) クライアント側からサーバにSSH接続でアクセスする際に入力するので覚えておくこと
 b) パスフレーズは、未入力も可能(AWSみたいにノンパス可能)

 

問題なければ、~/.ssh配下に「id_rsa秘密鍵)」「id_rsa.pub(公開鍵)」が生成されるはず。
ls -l ~/.ssh/
合計 8
-rw-------. 1 user_id user_id 3326  7月  4 21:50 id_rsa     <= 秘密鍵
-rw-r--r--. 1 user_id user_id  746  7月  4 21:50 id_rsa.pub <= 公開鍵

 

認証用公開鍵をサーバ側に設置する
mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
chmod 600  ~/.ssh/authorized_keys

 

  【2】 sshd_configの設定

サーバ側の「/etc/ssh/sshd_config」を修正し、SSH公開鍵認証できるように修正
sudo vi /etc/ssh/sshd_config
修正前
#PubkeyAuthentication yes

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile      .ssh/authorized_keys
修正後 (修正例)
PubkeyAuthentication yes <<公開鍵認証の許可するかどうか(yesを指定)>>
RSAAuthentication yes <<RSA認証の許可するかどうか(yesを指定)>>

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile      .ssh/authorized_keys <<公開鍵の保存場所を指定>>

 => 「sudo systemctl restart sshd」で再起動
【任意】パスワード認証を無効にする
passwordAuthentication no <<yesをnoへ変更>>

 

  【3】ファイアウォールの確認

sudo firewall-cmd --list-all
# services の欄に ssh が入っているか確認

# ssh がなかったら以下を実行
sudo firewall-cmd --permanent --add-service=ssh

 

  【4】 クライアントに秘密鍵を渡し、サーバ側にSSH接続する

 * クライアント側がWindowsの場合、Tera Term や Putty 等で SSH接続する
  => その際、秘密鍵を使う
  => 【1】でパスフレーズを設定した際は、そのパスフレーズを入力
     (決して、OS側のパスワードじゃないことに注意)
http://www.server-memo.net/server-setting/ssh/ssh-key.html