カメノドットコム
Debian大好きでメインで節操ない感じ。
GMOもわりと好き。
RSS feedly

SSHで公開鍵認証を強制する

SSHでパスワードログインは危険でいけません。
公開鍵認証方式に切り替えましょう。ついでに強制してしまいます。
ここでは、キーペアを作成、公開鍵をサーバに登録、SSHサーバ設定変更、接続テスト、の順で作業します。
全てのローカル作業がDebianで行われていることはご愛嬌です。

---- [PR] ----
現在契約中 : GMOクラウドのVPS : お名前.com
今後契約するかも : お名前.com VPS
--------------

公開鍵認証のキーペアを作成

キーペアと言っても色々な形式がありまして。
セキュリティの観点から「RSA2の4096bit以上」か「ED25519」をおすすめします。
近頃ではRSA2の2048bitでも破られるケースがあるようです。
パスフレーズも設定しておきましょう。記号を使うのもいいですが、変なところでスペースを入れるのも効果的です。
FTPサーバを建てずにSFTPでファイル転送しますので、キーペアの名前を指定しています。

$ mkdir .ssh
$ cd .ssh
$ ssh-keygen -t rsa -b 4096 -C "コメント" -f id_rsa_worker
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in id_rsa_worker.
Your public key has been saved in id_rsa_worker.pub.
The key fingerprint is:
75:76:9c:a5:c3:e5:07:93:e6:2b:b8:24:10:c2:b2:02 Working User
The key's randomart image is:
+---[RSA 4096]----+
|   .          o.o|
|E . o .      ooO |
|.  o . .  . ooB o|
|. .   .  . o ....|
| .     .S  .   . |
|        . o . .  |
|         o . .   |
|          .      |
|                 |
+-----------------+
$ mkdir .ssh
$ cd .ssh
$ ssh-keygen -t ed25519 -C "コメント" -f id_ed25519_worker
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in id_ed25519_worker.
Your public key has been saved in id_ed25519_worker.pub.
The key fingerprint is:
fa:20:76:8e:17:21:75:9d:e0:78:36:be:3d:a4:45:13 Working User
The key's randomart image is:
+--[ED25519 256]--+
|        .oE.     |
|      .o. o.     |
|     ...= o      |
|    . .+ o .     |
|     . .S o      |
|      .. *       |
|    o +.o o      |
|   . =.o   .     |
|    ... .        |
+-----------------+

「RSA2」と「ED25519」両方のキーペアを作成してみました。
より強力な「ED25519」を使う方向で進めます。

公開鍵をサーバに転送して登録する

サーバ側にSSH用のディレクトリを掘っておきます。

hoge@server:~$ mkdir .ssh
hoge@server:~$ chmod 700 .ssh

ローカルからサーバに公開鍵を転送します。ポート番号を変更していることをお忘れなく。

aho@local:~/.ssh$ scp -P 49152 id_ed25519_worker.pub hoge@IPもしくはドメイン:.ssh
id_ed25519_worker.pub                         100%   94     0.1KB/s   00:00

サーバ側で公開鍵を登録します。

hoge@server:~$ cd .ssh
hoge@server:~/.ssh$ ls
id_ed25519_worker.pub
hoge@server:~/.ssh$ cat id_ed25519_worker.pub >> authorized_keys
hoge@server:~/.ssh$ chmod 600 authorized_keys
hoge@server:~/.ssh$ rm id_ed25519_worker.pub
hoge@server:~/.ssh$ ls -l
total 4
-rw------- 1 hoge hoge 94 Apr  1 13:17 authorized_keys

準備が整いました。SSHサーバの設定を変更します。

SSHサーバで公開鍵認証のみ許可する

「/etc/ssh/sshd_config」を編集して再起動します。
編集に失敗した時のために、接続テストは新たにSSHクライアントを立ち上げて行ってください。

hoge@server:~$ sudo vi /etc/ssh/sshd_config
# コメントアウトを外して編集
#PasswordAuthentication yes
 ↓
PasswordAuthentication no
hoge@server:~$ sudo /etc/init.d/ssh restart

接続テストを行います。まずはパスワードで弾かれるかどうか。

aho@local:~$ ssh -p 49152 hoge@IPもしくはドメイン
Permission denied (publickey).

パスワードでのログインが弾かれ、公開鍵認証を使えとのメッセージ。成功です。

aho@local:~$ ssh -p 49152 -i ~/.ssh/id_ed25519_worker hoge@IPもしくはドメイン
Enter passphrase for key '/home/hoge/.ssh/id_ed25519_worker': 
(略)
Last login: Sun Apr  1 12:00:29 2018 from xxx.xxx.xxx.xxx
hoge@server:~$

パスフレーズつきの公開鍵認証で接続に成功しました。
もう一段階セキュリティを上げるため、接続できるユーザも限定しておきましょう。

Sponsored Link