始めに結論を。パスワード同様、ssh の秘密鍵も KeePassXC で管理することをお勧めします。
以前から ssh の鍵の管理方法について悩んでいましたが、LOLIPOP! のレンタルサーバーを借りたのを機に調べてみた所、パスワードの管理と同様に ssh の秘密鍵の管理も KeePassXC で行った方が便利になる事が分かりました。
今回の記事では、KeyPassXC を使用するに至った経緯と、LOLIPOP! のレンタルサーバーに公開鍵認証を使用して ssh でログインするまでを、導入編として記載します。今後の予定としては、
と進めていく予定です。記事を公開した後には、上記リストをリンクに書き換えます。
- 番外編 WSL2 で wsl2-ssh-agent を試す
- 番外編2 Synology NAS に公開鍵認証で接続する際の注意点
- 番外編3 Windows11 へ github 版の OpenSSH を試す (ssh-agent 不具合対策)
番外編3で、Windows11 へ github 版の OpenSSH を導入した所、ssh-agent.exe の不具合は解消しました。
私のパスワードの管理方法
私は PC のパスワードの管理に KeePass 2 を使用しています。その前は KeePass を使用していて、最も古いエントリを調べたら2013年4月でしたので、約10年に渡って KeePass/KeePass2 を使用している事になります。スマホでは、PC と同じパスワードのデータで KeePass Touch を使用しています。
KeePass に限りませんが、パスワード管理ソフトウェアを使用するメリットは以下のようになります。
- マスターパスワード一つで複数のログイン名とパスワードを保管できる
- 覚えておくのはマスターパスワードのみで、他のログイン名やパスワードは記憶しなくてもOK
- 保管しているログイン名とパスワードはコピー & ペーストできる
- パスワードを手入力する必要が無いので、複雑なパスワードを設定できる
- パスワードの自動生成機能があるので、パスワードの長さや文字種類 (アルファベット大文字・小文字・数字や記号等) を設定するだけで、複雑なパスワードを設定できる
- パスワードデータベース自体が暗号化されているので、手書きやPC内のメモデータと比較して流出した際のリスクが低い
- クラウドを使用すればパスワードデータベースを PC だけでなくスマホとも共有できるので、必要な全ての端末で最新のパスワードデータベースを使用できる
- 単一のパスワードデータベースのファイルをバックアップすればよく、クラウドを利用すればファイルを失うリスクも少ない
逆にデメリットとしては、
- マスターパスワードを忘れた場合にパスワードデータベースを開く事が困難、というか不可能
位でしょうか。
一時的なパスワードを含めて KeePass2 で管理して、PC でもスマホでも最新のパスワードデータベースを参照する事ができ、且つパスワードの自動生成機能により新しいパスワードを考える必要がないので、パスワード管理に悩む事が無くなりました。
NAS 上にパスワードデータベースファイルを置いて PC から開き、Dropbox 経由でスマホに送っています。同時に NAS で外付HDD へバックアップ -> OneDrive へバックアップ と多重化されていますので、ファイルを失うリスクは限りなく少なくしています。
KeePass/KeePass2/KeePassXC とは
KeePass (KeePass Password Safe) は、フリーかつオープンソースのパスワードマネージャーである。主なターゲットはWindowsだが、バージョン2.x以降ではMonoによってLinuxやmacOSにも対応している。また、様々なプラットフォームに移植されている。
https://ja.wikipedia.org/wiki/KeePass
KeePass は Windows 用なのに対して、KeePass2 はマルチプラットフォーム化されたバージョンです。
With so many passwords to remember and the need to vary passwords to protect your valuable data, it’s nice to have KeePass to manage your passwords in a secure way. KeePass puts all your passwords in a highly encrypted database and locks them with one master key or a key file. As a result, you only have to remember one single master password or select the key file to unlock the whole database. And the databases are encrypted using the best and most secure encryption algorithms currently known, AES and Twofish. See our features page for details.
覚えなければならないパスワードが非常に多く、貴重なデータを保護するためにパスワードを変更する必要があるため、KeePass でパスワードを安全に管理できると便利です。KeePass はすべてのパスワードを高度に暗号化されたデータベースに保管し、1 つのマスター キーまたはキー ファイルでロックします。その結果、1 つのマスター パスワードを覚えるか、キー ファイルを選択してデータベース全体のロックを解除するだけで済みます。また、データベースは、現在知られている最高かつ最も安全な暗号化アルゴリズムである AES と Twofish を使用して暗号化されます。
https://sourceforge.net/projects/keepass/
KeePass / KeePass2 共に現在もメンテナンスされており、2023年1月にも新しいバージョンが公開されています。
KeePassXC は KeePass / KeePass2 から fork した KeePassX を元に改良が加えられたソフトウェアです。
ScreenShot を見ると、KeePass / KeePass2 よりも現代的なインターフェースに変わっています。
ssh 秘密鍵の管理の為に KeePass2 から KeePassXC へ移行
パスワードを管理するだけであれば KeePass2/KeePass Touch の組み合わせで不満はありませんでした。そんな私が KeePassXC へ移行しようと考えたのは、ssh の秘密鍵/公開鍵がちゃんと管理できていなかった為です。
LOLIPOP! のレンタルサーバーを使い始め、ssh を使用する度にパスワードの入力が必要になりました。Linux を使用していた際には ssh-agent でパスフレーズを記憶できましたが、秘密鍵/公開鍵が Linux や WSL2、Windows11 と各所に分散している状況になると、鍵とサイトの組み合わせが分かりにくく、どのように管理すればよいか迷っていました。
そんな中、下記の二つの記事を見つけました。
- パスワードについての管理方法はこれまで通り変わりなし。
- Windows 上で ssh-agent サービスを起動させておいて KeePassXC を起動すれば、マスターパスワードの入力だけで ssh の鍵情報が ssh-agent に渡される。
- KeePassXC を終了すれば、ssh-agent サービスから ssh の鍵情報が削除される。
- 適切に設定すれば WSL2 で起動する ssh でも Windows 側の ssh-agent の鍵情報が利用できる。
- MacOS や Linux で KeePassXC を起動すれば、ssh-agent に ssh の鍵情報が渡される。
という事で、KeePass2/KeePass Touch でユーザー名とパスワードの自動入力を行っていた事を上回る簡単さで、ssh-agent に鍵情報を渡す事が出来ることが分かりました。
実際には KeePass2 にも ssh-agent との連携機能を実現するプラグインが存在しますが
折角の機会ですので KeePassXC に移行しようと思います。同時にスマホ側のアプリについても KeePassium に移行します。
KeePassXC はスクリーンショットが取得できない (Security)
KeePassXC を通常通り起動しスクリーンショットを記録しようとすると画面が消えてしまいます。これは Screenshot Security という機能で、標準で有効になっているので正常な動作です。コマンドラインから --allow-screencapture オプションを指定して起動することで、スクリーンショットの取得が可能になります。
以下でスクリーンショットを掲載していますが、これは --allow-screencapture を有効にして記録しています。
ssh の鍵ペアの作成と公開鍵認証による接続の確認
初めに、秘密鍵 / 公開鍵の作成と、ssh 単体で公開鍵認証による接続が出来るかどうか確認します。パスフレーズは予め KeePassXC で作成しておいた方が楽です (コピペできる)。
KeyPassXC へ ssh 用のエントリを仮作成 (パスフレーズのみ登録)
予め KeyPassXC に ssh 鍵保管用のエントリーを作成し、パスフレーズを作成しておきます。
タイトルは分かりやすい名称を設定します。
パスワード欄の右側のサイコロマークを押すと、パスワード / パスフレーズの自動生成画面に変わります。
パスフレーズの場合は、単語の組み合わせによって作成されます。このパスフレーズを直接入力する事はないので、長めに設定します。上の図では、8単語をスペース区切りで合わせて、文字数65文字に設定しています。
パスフレーズを適用したら元の画面に戻って、一旦OKを押してエントリを保存します。このエントリを使用して、この後で鍵ペアを作る際のパスフレーズのコピー元にします。
ssh の秘密鍵と公開鍵のペアを作成
ssh の秘密鍵と公開鍵のペアを作成します。作成方法については検索すると事例がたくさん見つかりますので、簡単に手順のみを示します。WSL2 Ubuntu で Ed25519 で作成しました。 パスフレーズには、先程作成しておいたエントリのパスワードをコピー & ペーストします。
# WSL2 Ubuntu 上での作業
$ ssh-keygen -t ed25519 -C hiro20180901
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/hiro/.ssh/id_ed25519): (ファイル名がこれでよければ Enter)
Enter passphrase (empty for no passphrase): (パスフレーズをペーストする、表示されない)
Enter same passphrase again: (パスフレーズの再度ペーストする、表示されない)
Your identification has been saved in /home/hiro/.ssh/id_ed25519
Your public key has been saved in /home/hiro/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX hiro20180901
The key's randomart image is:
+--[ED25519 256]--+
...snip...
+----[SHA256]-----+
$ ls .ssh/id*
.ssh/id_ed25519 .ssh/id_ed25519.pub
これで ssh の秘密鍵と公開鍵が作成できました。
ssh で公開鍵認証でログインできるか確認する
今回は LOLIPOP! レンタルサーバーに使用しますので、id_ed25519.pub をサーバーにコピーします。lolipop の名称で Host を登録しています。
なお、LOLIPOP! レンタルサーバーの ssh サーバーは RSA の HostKey を使用していますが、新しめの ssh クライアントでは非推奨で無効になっているので、有効化させる必要があります。
# WSL2 Ubuntu 上での作業
# lolipop で Host を設定
$ cat ~/.ssh/config
Host lolipop
# 下2行は LOLIPOP! の ssh サーバーに接続するのに必要
HostKeyAlgorithms +ssh-rsa
UpdateHostKeys no
Hostname ssh.lolipop.jp
User lolipop_username
Port 2222
# 公開鍵を LOLIPOP! の authorized_keys に追加する
$ ssh-copy-id -p 2222 -i ~/.ssh/id_ed25519.pub lolipop
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/hiro/.ssh/id_ed25519.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
lolipop_username@ssh.lolipop.jp's password: (LOLIPOP! ssh のパスワードを入力)
Number of key(s) added: 1
Now try logging into the machine, with: "ssh -p '2222' 'lolipop'"
and check to make sure that only the key(s) you wanted were added.
id_ed25519.pub を LOLIPOP! レンタルサーバーの ~/.ssh/authorized_keys に追加できれば、パスワード認証の代わりに公開鍵認証でログイン出来るようになります。
# WSL2 Ubuntu 上での作業
# 公開鍵認証で LOLIPOP! ssh サーバーへログイン
$ ssh lolipop
Enter passphrase for key '/home/hiro/.ssh/id_ed25519':
[lolipop_username@server ~]$ exit
# ssh-agent を起動
$ eval $(ssh-agent)
Agent pid 11058
$ ssh-add -l
The agent has no identities.
# 秘密鍵の登録とパスフレーズ入力 (コピペ)
$ ssh-add ~/.ssh/id_ed25519
Enter passphrase for /home/hiro/.ssh/id_ed25519: (パスフレーズをコピー & ペースト)
Identity added: /home/hiro/.ssh/id_ed25519 (hiro20180901)
# パスフレーズなしでログインできた
$ ssh lolipop
[lolipop_username@server ~]$
aah-agent が起動している状態で ssh-add で秘密鍵を登録すれば、パスフレーズを入力しなくてもログインが可能です。
ここまでで、WSL2 側で公開鍵認証を使用して、LOLIPOP! ssh サーバーへログインできる事が確認できました。
まとめ
今回は、ssh の鍵ペアの管理を楽にする為に、KeePassXC への移行と、公開鍵認証による LOLIPOP! レンタルサーバーへのログインまでの動作を確認しました。
次回は、Windows11編として、KeePassXC への鍵ペアの登録、及び Windows11 の ssh-agent サービスの起動、KeePassXC から秘密鍵の情報が ssh-agent サービスに渡されてパスフレーズなしで LOLIPOP! レンタルサーバーにログインできるかどうかを確認したいと感がています。
今回のアイキャッチ画像
今回も stable diffusion で作成してみました。森の小道です。やはり呪文が難しい。
コメント