そういうのがいいブログ

SIerで働く30代サラリーマンSEがインフラエンジニアに憧れてLinux・クラウド・AWSの勉強をするブログ

MacからLinuxへのSSHにセキュリティの高い公開鍵認証を設定する手順

MacからLinuxサーバへのSSH接続を、従来のパスワード認証から、よりセキュリティの高い公開鍵認証に変更する手順を知りたい。
RSA/ECDSA/ED25519の鍵の種類の違いも教えてほしい。
・具体的な手順を教えてほしい。

こういった疑問に答えます。

本記事の内容

  1. Mac(macOS Big Sur)からLinuxサーバへのSSHにセキュリティの高いSSH公開鍵認証を設定する手順
  2. RSA/DSA/ECDSA/ED25519の違い

サトナカ (@souiunogaii)

この記事を書いている私は、某SIerに勤務しながら、
WEB系エンジニア・インフラエンジニアに憧れて、プログラミングおよびインフラ技術の勉強をしています。

こういった私が、解説していきます。

私が実機で試したコマンドや画像を載せて書いています。
記事の信頼性担保に繋がると思います。

ちなみに、Windows10の場合の手順は下記の記事に書いています。

souiunogaii.hatenablog.com

Mac(macOS Big Sur)からLinuxサーバへのSSHにセキュリティの高いSSH公開鍵認証を設定する手順

SSH接続の「従来のパスワード認証」と「公開鍵認証(秘密鍵と公開鍵のキーペア)」の違い

以下のページの解説が分かりやすいです。

knowledge.sakura.ad.jp

これを、公開鍵認証方式を使って
「鍵を持っている人(パソコン)からのみ、一般ユーザーによるログインを許可する。」
という方式に変更します。
これにより、パスワード総当り攻撃などで第三者に不正にsshのログインを試みられても、鍵が盗まれない限り破られることはありません。

公開鍵認証方式でログインするには鍵が2つ必要です。パソコン側に置く秘密鍵ファイルと、サーバー側に置く公開鍵ファイルです。
秘密鍵ファイルは人に知られてはいけません。公開鍵ファイルは、人に知られても良い(公開できる)ファイルです。
この2つのファイルが揃って初めて公開鍵認証によるログインが可能になります。

通常のパスワード認証によるログイン
メリット
・ログインが簡単。
・どのパソコンからでもログインできる。
デメリット
・悪意ある第三者からの総当り攻撃を受けてサーバーに不正侵入される可能性が高まる。
公開鍵認証のみによるログイン
メリット
秘密鍵を持っているパソコンからの接続のみ許可し、鍵を持っていないパソコンからはログイン出来ないのでセキュリティが向上する。
デメリット
・鍵を作成したり管理する手間がかかる。
・パソコンの故障や紛失などで秘密鍵を紛失したら、再び鍵を作りなおさないといけない。
・どこからでも接続できない。
図および解説文の引用元: 「よく分かる公開鍵認証」~初心者でもよくわかる!VPSによるWebサーバー運用講座(2)(さくらのナレッジ > 初心者向け :2015.09.18)

今回の環境について

  • 接続先サーバ:Oracle Linux 8.3 (OpenSSH 8.0が稼働中)、IPアドレスは192.168.1.117
  • クライアントPC:macOS Big Sur、使用ソフトはターミナル

サーバ側のOpenSSHのバージョン

$ ssh -V
OpenSSH_8.0p1, OpenSSL 1.1.1g FIPS  21 Apr 2020

macOS側のOpenSSHのバージョン

$ ssh -V
OpenSSH_8.1p1, LibreSSL 2.7.3

手順①:キーペア(秘密鍵と公開鍵)の作成

ターミナルから「ssh-keygen」コマンドを実行してキーペアを作成します。

ssh-keygen -t ecdsa -b 521 -C "satonaka@pc-hyperion.planet.space.com"

今回は接続先のLinuxサーバーでOpenSSH8.0が稼働しているので、
意識高く、ECDSA-521を選択しました。

% ssh-keygen -t ecdsa -b 521 -C "satonaka@pc-hyperion.planet.space.com"
Generating public/private ecdsa key pair.
Enter file in which to save the key (/Users/satonaka/.ssh/id_ecdsa): /Users/satonaka/.ssh/pc-hyperion_id_ecdsa
Created directory '/Users/satonaka/.ssh'.
Enter passphrase (empty for no passphrase): ★★★パスフレーズを入力
Enter same passphrase again: ★★★パスフレーズを入力
Your identification has been saved in /Users/satonaka/.ssh/pc-hyperion_id_ecdsa.
Your public key has been saved in /Users/satonaka/.ssh/pc-hyperion_id_ecdsa.pub.
The key fingerprint is:
SHA256:zEBxxESaIDDD3QkmauowQlm6lY8XSDxzbsZqkT3IkKA satonaka@pc-hyperion.planet.space.com
The key's randomart image is:
+---[ECDSA 521]---+
|Bo==+ +*=        |
|o*B*o* +.        |
|E=o+X.+          |
|+ o=oB.+         |
|=. .=o. S        |
|+. o.            |
| ..              |
|                 |
|                 |
+----[SHA256]-----+

「鍵のパスフレーズ」は、秘密鍵にアクセスするためのパスワードです。
万一、秘密鍵が外部に流出したときのために設定しておくものです。

(参考メモ)RSA/DSA/ECDSA/EDの違い

昔ながらのSIerが大好きなのは、やはりRSA。最近の意識高い系の若手エンジニアが使いたがるのは、ECDSAかED25519みたいです。

鍵の種類 鍵の長さ メモ
RSA1 1024 SSH1で使われていた。使用推奨期間は2010年末で、現在は危険なので使用不可
RSA 2048~ SSH2で使われている。
OpenSSHのバージョンの制約で、10年以上前からある環境、昔ながらのSIerでは大抵これを使っている
主流の2048ビットの使用推奨期間は2030年末
DSA 1024 使用推奨期間は2010年末で、現在は危険なので使用不可
ECDSA 256、384、521 楕円曲線。OpenSSH5.7(2011年リリース)以降でサポート
意識高い系エンジニアならこれ。
ED25519 256 エドワーズ曲線。OpenSSH6.5(2014年リリース)以降でサポート
圧倒的に意識高い系エンジニアなら迷わずこれ。

≫OpenSSHリリースノート https://www.openssh.com/releasenotes.html 

キーペア(秘密鍵と公開鍵)のファイルが作成できたことを確認

cd ~/.ssh
ls -l
% cd ~/.ssh
% ls -l
total 16
-rw-------  1 satonaka  staff  821  1  2 10:04 pc-hyperion_id_ecdsa
-rw-r--r--  1 satonaka  staff  289  1  2 10:04 pc-hyperion_id_ecdsa.pub

ファイルをcatで開くと中身は以下のような形になっています。

秘密鍵ファイルの内容

cat pc-hyperion_id_ecdsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABDsodOg8I
pl442lIWI+/EanAAAAEAAAAAEAAACsAAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlz
(途中省略)
qoWdSzlkwlASmZDS3+I6q1k1rH5ANjkMZxYXiy7fKrrwu+kQJjQ3Wax6F5ENwBsMAqNkD3
Gl8hn2UShnjlzlqiM7Eh/RGHu878QNE0ZUWsIQ5fYBSisL+n5+bPt/PSWiPGyahxPghW1k
sSx4PtEQImkeQb/8vb59CMx5urlA+ptKnIytBR2d
-----END OPENSSH PRIVATE KEY-----

公開鍵ファイルの内容

cat pc-hyperion_id_ecdsa.pub
ecdsa-sha2-nistp521 AAAAE2Vj(途中省略)VSWpfL8f+g== satonaka@pc-hyperion.planet.space.com

手順②:Linuxサーバー側の設定ファイルの変更

現在の設定ファイル/etc/ssh/sshd_config の確認

cd /etc/ssh
ls | grep sshd
[root@SV-IXION ~]# cd /etc/ssh
[root@SV-IXION ssh]# ls | grep sshd
sshd_config

現在の設定ファイル/etc/ssh/sshd_config のバックアップ

cp -p sshd_config sshd_config.originalbk
[root@SV-IXION ssh]# cp -p sshd_config sshd_config.originalbk
[root@SV-IXION ssh]# ls -l | grep sshd
-rw-------. 1 root root       4269  731 21:21 sshd_config
-rw-------  1 root root       4269  731 21:21 sshd_config.originalbk

設定ファイル/etc/ssh/sshd_config の変更

vi /etc/ssh/sshd_config

48行目のPubkeyAuthentication yesのコメントを外して有効化します。

# Authentication:

#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

PubkeyAuthentication yes

設定変更後のSSHの再起動

systemctl restart sshd
systemctl status sshd
[root@SV-IXION ssh]# systemctl restart sshd
[root@SV-IXION ssh]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset>
   Active: active (running) since Thu 2020-12-31 13:21:14 JST; 6s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 4718 (sshd)
    Tasks: 1 (limit: 1948)
   Memory: 1.3M
   CGroup: /system.slice/sshd.service
           mq4718 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-p>

1231 13:21:14 SV-IXION systemd[1]: Starting OpenSSH server daemon...
1231 13:21:14 SV-IXION sshd[4718]: Server listening on 0.0.0.0 port 22.
1231 13:21:14 SV-IXION sshd[4718]: Server listening on :: port 22.
1231 13:21:14 SV-IXION systemd[1]: Started OpenSSH server daemon.

手順③:公開鍵ファイルをLinuxサーバーへ配置

ホームディレクトリに「.sshディレクトリを作成

mkdir ~/.ssh
chmod 700 ~/.ssh
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh

ターミナルのSCP機能を使って公開鍵ファイルをアップロード

Macから「SCP」で公開鍵をサーバ上にアップロードします。

scp /Users/satonaka/.ssh/pc-hyperion_id_ecdsa.pub satonaka@sv-ixion:~/.ssh/pc-hyperion_id_ecdsa.pub

scp (Mac側のパス) (ユーザ名)@(アドレス):(パス)

% scp /Users/satonaka/.ssh/pc-hyperion_id_ecdsa.pub satonaka@sv-ixion:~/.ssh/pc-hyperion_id_ecdsa.pub
satonaka@sv-ixion's password: 
pc-hyperion_id_ecdsa.pub                      100%  289   433.5KB/s   00:00    

サーバ側でアップロードされたファイルの確認

$ cd ~/.ssh
$ ls -l
合計 8
-rw------- 1 satonaka satonaka 289 1231 13:16 authorized_keys
-rw------- 1 satonaka satonaka 289  12 10:17 pc-hyperion_id_ecdsa.pub

アップロードした公開鍵ファイルの内容をauthorized_keysファイルに追記

cat pc-hyperion_id_ecdsa.pub >> authorized_keys
$ cat pc-hyperion_id_ecdsa.pub >> authorized_keys 

手順④:Macのターミナルで公開鍵認証での接続テスト

ssh -i ~/.ssh/pc-hyperion_id_ecdsa satonaka@sv-ixion
% ssh -i ~/.ssh/pc-hyperion_id_ecdsa satonaka@sv-ixion
Enter passphrase for key '/Users/satonaka/.ssh/pc-hyperion_id_ecdsa': ★★★パスフレーズを入力
##############################################
#  _____                                    
# /       \      /    | \  / |  / \  |\   | 
# \_____   \    /  == |  \/  | |   | | \  | 
#       \   \  /      |  /\  | |   | |  \ | 
#  _____/    \/       | /  \ |  \_/  |   \| 
#                                          
# SV-IXION [192.168.1.117]
# Oracle Linux 8.3
# OpenSSL, PrivateRootCA,InterCA
#
#############################################
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Sat Jan  2 10:18:16 2021 from 192.168.1.110

ログの確認

/var/log/secure
Jan  2 11:30:45 SV-IXION sshd[7647]: Accepted publickey for satonaka from 192.168.1.110 port 50307 ssh2: ECDSA SHA256:zEBxxESaIDDD3QkmauowQlm6lY8XSDxzbsZqkT3IkKA
Jan  2 11:30:45 SV-IXION sshd[7647]: pam_unix(sshd:session): session opened for user satonaka by (uid=0)

手順⑤:従来のパスワード認証を無効化する

せっかく公開鍵認証を設定したのに、従来のパスワード認証が有効のままだと、
結局、パスワードが流出したら不正ログインができてしまうのでセキュリティ上、意味がありません。

ですので、従来のパスワード認証を無効化します。


必ず、公開鍵認証の接続テストでOKになってから、従来のパスワード認証を無効化してください。
そうでないと、リモートでログインができなくなってしまい、物理マシンに直接アクセスしたり、ESXi等のコンソール画面から直接操作するか、が必要になってしまいます。

現在の設定ファイル/etc/ssh/sshd_config のバックアップ

cd /etc/ssh
cp -p sshd_config sshd_config.originalbk2
[root@SV-IXION .ssh]# cd /etc/ssh
[root@SV-IXION ssh]# cp -p sshd_config sshd_config.originalbk2
[root@SV-IXION ssh]# ls -l | grep sshd
-rw-------  1 root root       4269  731 21:21 sshd_config
-rw-------  1 root root       4269  731 21:21 sshd_config.originalbk
-rw-------  1 root root       4268 1231 13:20 sshd_config.originalbk2

設定ファイル/etc/ssh/sshd_config の変更

vi /etc/ssh/sshd_config

70行目のPasswordAuthentication yesPasswordAuthentication no に変更します。

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication no

設定変更後のSSHの再起動

systemctl restart sshd
systemctl status sshd
[root@SV-IXION ssh]# systemctl restart sshd
[root@SV-IXION ssh]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset>
   Active: active (running) since Thu 2020-12-31 13:46:50 JST; 7s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 5089 (sshd)
    Tasks: 1 (limit: 1948)
   Memory: 1.8M
   CGroup: /system.slice/sshd.service
           mq5089 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-p>

1231 13:46:50 SV-IXION systemd[1]: sshd.service: Succeeded.
1231 13:46:50 SV-IXION systemd[1]: Stopped OpenSSH server daemon.
1231 13:46:50 SV-IXION systemd[1]: Starting OpenSSH server daemon...
1231 13:46:50 SV-IXION sshd[5089]: Server listening on 0.0.0.0 port 22.
1231 13:46:50 SV-IXION sshd[5089]: Server listening on :: port 22.
1231 13:46:50 SV-IXION systemd[1]: Started OpenSSH server daemon.

手順⑤:従来のパスワード認証が出来なくなったことのテスト

Macのターミナルで従来のパスワード認証でログインできるか試してみます。

ssh satonaka@sv-ixion
% ssh satonaka@sv-ixion                                 
satonaka@sv-ixion: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

「Permission denied」と表示されて、ログインができなくなりました。

/var/log/secure
Jan  2 11:28:32 SV-IXION sshd[7639]: Connection closed by authenticating user satonaka 192.168.1.110 port 50300 [preauth]

まとめ

今回は、MacからLinuxサーバーにリモート接続するときに、よりセキュリティを高めるために、
従来のパスワード認証を無効化して、
代わりに、
キーペア(秘密鍵と公開鍵)による公開鍵認証を有効化する手順を紹介しました。

秘密鍵ファイルを誤ってなくしてしまったり、破損してしまったりすると、サーバーに接続できなくなってしまうので、必ずバックアップを取るようにしましょう。
MacでもWindowsでも使えるおすすめのバックアップソフトは以下です。

Acronis True Image 2021
Standard 通常版 (永続版) -
3 Computers