・MacからLinuxサーバへのSSH接続を、従来のパスワード認証から、よりセキュリティの高い公開鍵認証に変更する手順を知りたい。
・RSA/ECDSA/ED25519の鍵の種類の違いも教えてほしい。
・具体的な手順を教えてほしい。
こういった疑問に答えます。
本記事の内容
この記事を書いている私は、某SIerに勤務しながら、
WEB系エンジニア・インフラエンジニアに憧れて、プログラミングおよびインフラ技術の勉強をしています。
こういった私が、解説していきます。
私が実機で試したコマンドや画像を載せて書いています。
記事の信頼性担保に繋がると思います。
ちなみに、Windows10の場合の手順は下記の記事に書いています。
- 本記事の内容
- Mac(macOS Big Sur)からLinuxサーバへのSSHにセキュリティの高いSSH公開鍵認証を設定する手順
- 手順②:Linuxサーバー側の設定ファイルの変更
- 手順③:公開鍵ファイルをLinuxサーバーへ配置
- 手順④:Macのターミナルで公開鍵認証での接続テスト
- 手順⑤:従来のパスワード認証を無効化する
- 手順⑤:従来のパスワード認証が出来なくなったことのテスト
- まとめ
Mac(macOS Big Sur)からLinuxサーバへのSSHにセキュリティの高いSSH公開鍵認証を設定する手順
SSH接続の「従来のパスワード認証」と「公開鍵認証(秘密鍵と公開鍵のキーペア)」の違い
以下のページの解説が分かりやすいです。
これを、公開鍵認証方式を使って
「鍵を持っている人(パソコン)からのみ、一般ユーザーによるログインを許可する。」
という方式に変更します。
これにより、パスワード総当り攻撃などで第三者に不正にsshのログインを試みられても、鍵が盗まれない限り破られることはありません。公開鍵認証方式でログインするには鍵が2つ必要です。パソコン側に置く秘密鍵ファイルと、サーバー側に置く公開鍵ファイルです。
秘密鍵ファイルは人に知られてはいけません。公開鍵ファイルは、人に知られても良い(公開できる)ファイルです。
この2つのファイルが揃って初めて公開鍵認証によるログインが可能になります。通常のパスワード認証によるログイン
メリット
・ログインが簡単。
・どのパソコンからでもログインできる。
デメリット
・悪意ある第三者からの総当り攻撃を受けてサーバーに不正侵入される可能性が高まる。
公開鍵認証のみによるログイン
メリット
・秘密鍵を持っているパソコンからの接続のみ許可し、鍵を持っていないパソコンからはログイン出来ないのでセキュリティが向上する。
デメリット
・鍵を作成したり管理する手間がかかる。
・パソコンの故障や紛失などで秘密鍵を紛失したら、再び鍵を作りなおさないといけない。
・どこからでも接続できない。
図および解説文の引用元: 「よく分かる公開鍵認証」~初心者でもよくわかる!VPSによるWebサーバー運用講座(2)(さくらのナレッジ > 初心者向け :2015.09.18)
今回の環境について
サーバ側の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 7月 31 21:21 sshd_config -rw------- 1 root root 4269 7月 31 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> 12月 31 13:21:14 SV-IXION systemd[1]: Starting OpenSSH server daemon... 12月 31 13:21:14 SV-IXION sshd[4718]: Server listening on 0.0.0.0 port 22. 12月 31 13:21:14 SV-IXION sshd[4718]: Server listening on :: port 22. 12月 31 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 12月 31 13:16 authorized_keys -rw------- 1 satonaka satonaka 289 1月 2 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 7月 31 21:21 sshd_config -rw------- 1 root root 4269 7月 31 21:21 sshd_config.originalbk -rw------- 1 root root 4268 12月 31 13:20 sshd_config.originalbk2
設定ファイル/etc/ssh/sshd_config
の変更
vi /etc/ssh/sshd_config
70行目のPasswordAuthentication yes
をPasswordAuthentication 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> 12月 31 13:46:50 SV-IXION systemd[1]: sshd.service: Succeeded. 12月 31 13:46:50 SV-IXION systemd[1]: Stopped OpenSSH server daemon. 12月 31 13:46:50 SV-IXION systemd[1]: Starting OpenSSH server daemon... 12月 31 13:46:50 SV-IXION sshd[5089]: Server listening on 0.0.0.0 port 22. 12月 31 13:46:50 SV-IXION sshd[5089]: Server listening on :: port 22. 12月 31 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 |