【Linux】SSH公開鍵認証でサーバへ接続するための設定方法

こんにちはますのです。LPIC2を取得して早2年。
ほとんど触る機会が無く忘れてきているのであります。そして自ら深堀しようともしていないので、何が出来るのか分からない状態でございます。

さて、そんな状態なので「鍵認証?どうやって設定するん??」というのがわたしの実力なのです。
Linuxにお詳しい方が作ってくださったマニュアル通りにやったところ、わたしでも出来たっすわということで、次回やる時にも出来るようにと備忘を残したいと思います。

五体投地。皆様のおかげでお仕事が出来ております。

目標:rootに昇格できるユーザの作成とssh公開鍵認証でのログインを可能にする

ざっくりイメージのご紹介
・秘密鍵を利用してユーザはログインする
・サーバ側に保存している公開鍵と一致した場合、ログインを許可する

②の暗号技術のところは図にすると分からなくなるので割愛です。というより、わたしが人に説明出来るほど理解できておらんのです。

対象となるユーザの作成とroot昇格設定

もうすでにユーザが作られている場合は無視して「SSH鍵の作成と設定方法」まで飛んじゃってください。

対象のユーザを作成する

作成した後にgrepで追加されていることを確認します。

# adduser testuser

# grep testuser /etc/passwd
testuser:x:1001:1001::/home/testuser:/bin/bash

作成したユーザのグループ追加とグループへの参加をする

グループ追加、追加したグループへの参加を行ったあとgrepとidコマンドで「testuser」に設定されているか確認します。

# groupadd grp_testuser
# usermod -aG grp_testuser testuser

# grep testuser /etc/passwd
testuser:x:1001:1001::/home/testuser:/bin/bash

#id testuser
uid=1001(testuser) gid=1001(testuser) groups=1001(testuser),1002(grp_testuser)

対象ユーザにsudo権限を設定する

「visudo」で起動後、「:set number」を入力すると行数が確認できます。
110行目の下に、先ほど追加したグループを追記します。

# visudo
-------------
109 ## Same thing without a password
110 # %wheel        ALL=(ALL)       NOPASSWD: ALL
111 %grp_testuser   ALL=(ALL)       NOPASSWD: ALL
わたしは何も考えず「wheel」にユーザをぶち込んで、コメントアウト「#」を外してsudo出来るぜ!とやっていました。
グループ追加の方が管理上良さげですね。

SSH鍵の作成と設定方法

クライアントで作成、もしくはサーバ側で作成どちらでも良いようです。
今回はサーバ側で作成して設定したいと思います。

SSH鍵の保存場所「~/.ssh」を作成

# su testuser -
$ mkdir -m 700 -p ~/.ssh
$ cd
$ ls -la
合計 12
drwx------  3 testuser testuser  74 10月  9 18:29 .
drwxr-xr-x. 4 root     root      42 10月  9 18:13 ..
-rw-r--r--  1 testuser testuser  18  8月  8  2019 .bash_logout
-rw-r--r--  1 testuser testuser 193  8月  8  2019 .bash_profile
-rw-r--r--  1 testuser testuser 231  8月  8  2019 .bashrc
drwx------  2 testuser testuser   6 10月  10 18:29 .ssh

対象ユーザのSSH鍵のペアを作成する

$cd .ssh
$ssh-keygen -t rsa -b 2048 -P "" -f ./testuser-ssh-key
Generating public/private rsa key pair.
Your identification has been saved in ./testuser-ssh-key.
Your public key has been saved in ./testuser-ssh-key.pub.

※pubが付与されているほうが公開鍵、付与されていないほうが秘密鍵となります。
※公開鍵をサーバに配置し、クライアントは秘密鍵を使用します。

公開鍵をサーバの「~/.ssh」内に保存する

[testuser@localhost .ssh]$ mv testuser-ssh-key.pub authorized_keys
[testuser@localhost .ssh]$ chmod 600 authorized_keys
[testuser@localhost .ssh]$ ls -l
合計 8
-rw------- 1 testuser testuser  412 10月  10 18:33 authorized_keys
-rw------- 1 testuser testuser 1675 10月  10 18:33 testuser-ssh-key

作成した「秘密鍵:testuser-ssh-key」をクライアント端末にダウンロードする

最後に秘密鍵「testuser-ssh-key」をダウンロードします。
「winSCP」や「TeraTerm」でダウンロードするも良し、catで「testuser-ssh-key」の内容をコピペして再作成するも良しです。
ただし、この秘密鍵が漏洩した場合、誰でも「testuser」でログイン出来るようになってしまうため注意してください。

sshd_config:鍵認証を有効にする

もし鍵認証を有効にしていない場合は以下の設定も必要になります。

sshd_configは設定を間違えるとサーバへログイン出来ない状態となります。
接続確認が取れるまで、TeraTermなどの接続中のものはそのままにしましょう。

「sshd_config」を変更する

# vi /etc/ssh/sshd_config
※末尾に追記※
-------------
  # ssh-user
  Match User testuser
    PasswordAuthentication no
    RSAAuthentication yes
    PubkeyAuthentication yes
「testuser」の場合、パスワード認証不可、公開鍵認証を許可という設定になります。
もし全ユーザで設定する場合は末尾追記ではなく、既存の項目の箇所を変更するようになります。

sshdのサービスを再起動する

念のため構文エラー等が出ないかチェックする。

# sshd -t

エラーが無いことを確認しサービス再起動を実施する。

# systemctl restart sshd
# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running)

接続確認をする

最後に「TeraTerm」や「PowerShell」で先ほど作成した秘密鍵でサーバにログイン出来るか確認します。
今回はPowerShellでのログイン方法にて。

PS C:temp> ssh -i "C:temp\testuser-ssh-key" testuser@192.168.3.8
Last login: Fri Oct  9 19:27:19 2020
Name
簡単に言ってしまうとこんな流れでしょうか。
・公開鍵、秘密鍵をssh-keygenで作成する
・作成した公開鍵を、サーバにアクセスさせたいユーザの「~/.ssh」に保存する
・クライアントPC→サーバへのログイン時に秘密鍵を使用する「このユーザにこの鍵を作る」といったイメージではなく、あくまでも鍵のセットで確認するのだなぁと認識した次第です。
最新情報をチェックしよう!