そういうのがいいブログ

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

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

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

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

本記事の内容

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

サトナカ (@souiunogaii)

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

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

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

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

souiunogaii.hatenablog.com

Windows10から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:Windows10、使用ソフトはTeraTerm (Ver.4.105)
  • TeraTermSSH鍵生成の機能でキーペアを作成
$ ssh -V
OpenSSH_8.0p1, OpenSSL 1.1.1g FIPS  21 Apr 2020

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

Tera Term (ver4.105) の「SSH鍵生成」の機能を使ってキーペアを作成します。

ja.osdn.net

昔ながらのSIerで使われている定番ソフトといえば、やはり、Tera Termですね。

Tera Term を起動したら「キャンセル」をクリック

設定>SSH鍵生成

TTSSH: 鍵生成の画面でキーペア作成

  • 鍵の種類:ECDSA-521

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

「生成」をクリック

(参考メモ)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 

「鍵を生成しました。」と表示されたらキーペア生成が完了。

鍵のパスフレーズを入力、コメントは任意(デフォルトは「ユーザー@ホスト名」)

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

秘密鍵の保存」をクリック

秘密鍵ファイルを保存する
(今回は、C:\Users\satonaka\.ssh に保存しました)

「公開鍵の保存」をクリック

公開鍵ファイルを保存します
(今回は、C:\Users\satonaka\.ssh に保存しました)

キーペア(秘密鍵と公開鍵)のファイルが作成できました。

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

秘密鍵ファイルの内容

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABBtRDsh9R
90FMD7AQGphJQAAAAAEAAAAAEAAACsAAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlz
(途中省略)
rHnj/TGI5d1R0ybI0elPg5ISFJii95Z9SuJ0WCcEMBtwSLlhQbdVL0RXsAu8FzQVEXTivm
MZdY2HriLOWplo/XCBs5vELMGjP2CB1Llxh7IpCkEUIc7bi6BqM3yzOYCwQsvuMMegBA==

-----END OPENSSH PRIVATE KEY-----

公開鍵ファイルの内容

ecdsa-sha2-nistp521 AAAAE2(途中省略)zRhw== satonaka@pc-ganymede.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

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

TeraTerm>ファイル>SSH SCP

TTSSH: Secure File Copy画面が開く

  • From: アップロードする公開鍵ファイル
  • To: アップロード先のサーバー上でのフルパス /home/satonaka/.ssh/authorized_keys

アップロードした~/.ssh/authorized_keysファイルのパーミッション変更

cd ~/.ssh
chmod 600 authorized_keys
$ cd ~/.ssh
$ chmod 600 authorized_keys

手順④:Tera Termで公開鍵認証での接続テスト

ログインできました。

ログの確認

/var/log/secure
Dec 31 13:27:52 SV-IXION sshd[4799]: Accepted publickey for satonaka from 192.168.1.101 port 61205 ssh2: ECDSA SHA256:zwJQmmcAFTVi7pY4nEemQXJlalR2R4MfM0xb5dgWKB8
Dec 31 13:27:52 SV-IXION sshd[4799]: pam_unix(sshd:session): session opened for user satonaka by (uid=0)

Accepted publickey forと出力されていればOKです。

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

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

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


必ず、公開鍵認証の接続テストで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.

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

Tera Termで従来のパスワード認証でログインできるか試してみます。

「認証に失敗しました」と表示されて、ログインができなくなりました。

Dec 31 13:47:18 SV-IXION sshd[4811]: Received disconnect from 192.168.1.101 port 61205:11: disconnected by server request
Dec 31 13:47:18 SV-IXION sshd[4811]: Disconnected from user satonaka 192.168.1.101 port 61205

まとめ

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

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

ソースネクスト

≫定番バックアップソフト「Acronis True Image」ソースネクスト版 

世界的なバックアップソフトの、ソースネクストだけの特別版
Acronis True Image Plus」は、バックアップソフト「Acronis True Image」を中心に3つの製品からなるソースネクストだけの特別版です。

万一、深刻なシステムトラブルに見舞われても、短時間で復旧できる本製品は、大切なデータを失わないために、1人でも多くの方に使っていただきたいソフトです。

当社ではテレワークを導入する企業の増加に伴い、個人のパソコン環境のバックアップに不安を感じている方も増えていると考え、テレワーク応援価格として2,980円(税別)で販売しています。
定番バックアップソフト「Acronis True Image」ソースネクスト