スポンサーリンク

KeePassXC で ssh 秘密鍵も管理して ssh-agent と連携する ~ 導入編 ~

forest
記事内に広告が含まれています。

始めに結論を。パスワード同様、ssh の秘密鍵も KeePassXC で管理することをお勧めします。

以前から ssh の鍵の管理方法について悩んでいましたが、LOLIPOP! のレンタルサーバーを借りたのを機に調べてみた所、パスワードの管理と同様に ssh の秘密鍵の管理も KeePassXC で行った方が便利になる事が分かりました。

今回の記事では、KeyPassXC を使用するに至った経緯と、LOLIPOP! のレンタルサーバーに公開鍵認証を使用して ssh でログインするまでを、導入編として記載します。今後の予定としては、

と進めていく予定です。記事を公開した後には、上記リストをリンクに書き換えます。

番外編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 - Wikipedia

KeePass (KeePass Password Safe) は、フリーかつオープンソースのパスワードマネージャーである。主なターゲットはWindowsだが、バージョン2.x以降ではMonoによってLinuxやmacOSにも対応している。また、様々なプラットフォームに移植されている。

https://ja.wikipedia.org/wiki/KeePass

KeePass は Windows 用なのに対して、KeePass2 はマルチプラットフォーム化されたバージョンです。

KeePass
Download KeePass for free. A lightweight and easy-to-use password manager. KeePass Password Safe is a free, open source,...

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 を元に改良が加えられたソフトウェアです。

KeePassXC - Wikipedia
KeePassXC Password Manager
KeePassXC Password Manager

ScreenShot を見ると、KeePass / KeePass2 よりも現代的なインターフェースに変わっています。

ssh 秘密鍵の管理の為に KeePass2 から KeePassXC へ移行

パスワードを管理するだけであれば KeePass2/KeePass Touch の組み合わせで不満はありませんでした。そんな私が KeePassXC へ移行しようと考えたのは、ssh の秘密鍵/公開鍵がちゃんと管理できていなかった為です。

LOLIPOP! のレンタルサーバーを使い始め、ssh を使用する度にパスワードの入力が必要になりました。Linux を使用していた際には ssh-agent でパスフレーズを記憶できましたが、秘密鍵/公開鍵が Linux や WSL2、Windows11 と各所に分散している状況になると、鍵とサイトの組み合わせが分かりにくく、どのように管理すればよいか迷っていました。

そんな中、下記の二つの記事を見つけました。

KeePassXC の SSH エージェント機能と Windows の ssh-agent.exe を連携させる
WSL2でKeepassXCのSSH key-agentを利用する - Qiita
前置きみなさん!WSL2でssh-agentはお使いでしょうか?久しぶりにWindowsを使い始めたところでハマったのがssh-agentどうするんだ?問題でした。MacOSの場合はkeepa…
  • パスワードについての管理方法はこれまで通り変わりなし。
  • 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 との連携機能を実現するプラグインが存在しますが

KeeAgent
KeeAgent is a plugin for KeePass 2.x that allows SSH keys stored in a KeePass database to be used for SSH authentication...

折角の機会ですので KeePassXC に移行しようと思います。同時にスマホ側のアプリについても KeePassium に移行します。

KeePassXC はスクリーンショットが取得できない (Security)

KeePassXC を通常通り起動しスクリーンショットを記録しようとすると画面が消えてしまいます。これは Screenshot Security という機能で、標準で有効になっているので正常な動作です。コマンドラインから --allow-screencapture オプションを指定して起動することで、スクリーンショットの取得が可能になります。

KeePassXC: Getting Started Guide

以下でスクリーンショットを掲載していますが、これは --allow-screencapture を有効にして記録しています。

ssh の鍵ペアの作成と公開鍵認証による接続の確認

初めに、秘密鍵 / 公開鍵の作成と、ssh 単体で公開鍵認証による接続が出来るかどうか確認します。パスフレーズは予め KeePassXC で作成しておいた方が楽です (コピペできる)。

KeyPassXC へ ssh 用のエントリを仮作成 (パスフレーズのみ登録)

予め KeyPassXC に ssh 鍵保管用のエントリーを作成し、パスフレーズを作成しておきます。

LOLIPOP 用の ssh key のエントリを作成

タイトルは分かりやすい名称を設定します。

パスワード欄の右側のサイコロマークを押すと、パスワード / パスフレーズの自動生成画面に変わります。

パスフレーズの場合は、単語の組み合わせによって作成されます。このパスフレーズを直接入力する事はないので、長めに設定します。上の図では、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 クライアントでは非推奨で無効になっているので、有効化させる必要があります。

ssh 接続で no matching host key type found エラー - Qiita
ずっと昔の Linux マシンに ssh しようとしたらエラー。$ ssh 192.168.0.5Unable to negotiate with 192.168.0.5 port 22: no…
# 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 で作成してみました。森の小道です。やはり呪文が難しい。

コメント

タイトルとURLをコピーしました