LoginSignup
19
28

More than 5 years have passed since last update.

SSHの認証方式を、公開鍵認証方式にする。

Last updated at Posted at 2018-05-15

SSHの認証方式はいくつかある。

  • パスワード認証
  • 公開鍵認証
  • ワンタイムパスワード認証

ワンタイムパスワード認証できるの初めて知った...

で、

「ssh接続の認証方式、公開鍵認証方式に変えといて〜」って言われたので、備忘録。

ざっくり言うとこんな感じ。

  • ssh-keygenで公開鍵と秘密鍵を生成
  • 生成した公開鍵は、SSHサーバ側に登録
  • 生成した秘密鍵は、SSHクライアント側に移動
  • パスワード認証もさせないように、ついでに変更しておく(残ってたら無意味なので)

SSHサーバ側:公開鍵と秘密鍵の生成〜公開鍵の設定

まず、
ssh-keygenコマンドで公開鍵と秘密鍵の生成をする。
コマンドを打つと以下を聞かれるので、答えていく。

  • ファイル名:Enter file in which to save the key (/root/.ssh/id_rsa):
    • デフォルトだと「id_rsa」
    • 複数サーバで鍵生成してると被ってくるおそれがあるので、適切な名称に変えて置く事が望ましい
  • パスフレーズ:Enter passphrase (empty for no passphrase):
    • デフォルトだと「(未設定)」
    • 利用者認証のための合言葉みたいなもので、パスワード認証のパスワードとは異なる。
    • 未設定のままでも使えるが、設定しておいた方がセキュリティレベルは上がる

次に、
公開鍵を保存しておくファイルであるauthorized_keysに公開鍵を追記する。

最後に、
パーミッションの確認および変更をして終わり。

sh
# 公開鍵と秘密鍵の生成
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): # ファイル名
Enter passphrase (empty for no passphrase): # パスフレーズ
Enter same passphrase again: # パスフレーズ(確認)
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:d/gQiLpY1DivqxMElaeGeh9LkNLU8qof6l4d019qE3k root@xxx.xxx.xxx.xxx.ZZZ
The key s randomart image is:
+---[RSA 2048]----+
| ..o             |
|. + oo . .       |
| = *+ o . .      |
|o B..+.   .o     |
|.+ ooo..So+E.    |
|. +o+oo ..=+     |
| oo=o+   =  .    |
|..o.o.  . .      |
|++oo.            |
+----[SHA256]-----+


# ファイル名を指定しなかったら`~/.ssh/`に生成される
# 指定してたら、カレントディレクトリに生成される
# 以下は、指定しなかった場合の例
$ ll ~/.ssh/
合計 8
-rw------- 1 root root    0  4月  9 09:48 authorized_keys
-rw------- 1 root root 1675  5月 15 15:20 id_rsa
-rw-r--r-- 1 root root  411  5月 15 15:20 id_rsa.pub


# `authorized_keys`に、公開鍵の中身を追記する
# 追記したら用無しなので削除する
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ rm ~/.ssh/id_rsa.pub


# パーミッション設定
# - `ll`コマンドなどで確認して問題なければ変更しなくてよいが、以下となっている必要がある
$ chmod 600 ~/.ssh/authorized_keys
$ chmod 700 ~/.ssh

SSHクライアント側:秘密鍵の取得〜公開鍵認証での接続確認

まず、
SSHサーバから秘密鍵をもらってくる。

あとは、
sshコマンドを打つ時に、-iオプションで秘密鍵を指定する。

sh
# scpコマンドなり何なりで、SSHサーバ上の秘密鍵を取得する
# 配置先は正直どこでもいいが、`~/.ssh/`が望ましい
$ scp root@xxx.xxx.xxx.xxx:/root/.ssh/id_rsa ~/.ssh/


# 公開鍵認証でログインできる事の確認
# - パスフレーズを設定してなければそのまま接続できるし、設定してれば入力してねって聞かれる
$ ssh -i ~/.ssh/id_rsa root@xxx.xxx.xxx.xxx
Enter passphrase for key '~/.ssh/id_rsa': 

ちなみに、
この時点だとまだパスワード認証できてしまう。

sh
$ ssh root@xxx.xxx.xxx.xxx
root@xxx.xxx.xxx.xxx's password:   # <=これがその証拠

SSHサーバ側:パスワード認証の禁止

さっき言った通り、今の時点だとパスワード認証が出来てしまう。
そのため、設定ファイルを書き換えてから、デーモンを再起動する。

ちなみに、
SSHクライアント側の設定より前にやってしまうと、scpコマンドでパスワード認証できなくなる
そのため、最低でも、秘密鍵を取得してから、これからの設定を行う。

sh
# 設定ファイルを開く
$ vim /etc/ssh/sshd_config
/etc/ssh/sshd_config
# PasswordAuthenticationをnoに変更
PasswordAuthentication no

# PubkeyAuthenticationをyesに変更
PubkeyAuthentication yes
sh
# sshデーモンを再起動
$ service sshd restart

SSHクライアント側:パスワード認証での接続不可確認

最後に、
クライアント側からパスワード認証で接続できない事を確認すればOK。

sh
# これでパスワード認証できなくなった
$ ssh root@xxx.xxx.xxx.xxx
root@xxx.xxx.xxx.xxx: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).  # <=これがその証拠

参考

http://www.atmarkit.co.jp/flinux/rensai/linuxtips/430dnypsswdacces.html
https://qiita.com/nnahito/items/dbe6fbfe347cd66ae7e6

19
28
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
28