スポンサーリンク

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

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

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

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

5回目となる今回の記事では、

  • Linux で KeePassXC を使用して ssh-agent に鍵の情報を渡す
  • Windows11 の ssh-agent をリモートの Linux でも使う

という二つの方法が出来るかどうかを、Linux 編として記載します。

記事を公開した後には、上記リストをリンクに書き換えます。

今回の Linux 編で一区切りとしますが、他にも ssh-agent の鍵を共用したい環境を使う機会があれば追加で調べてみます。

番外編3で、Windows11 へ github 版の OpenSSH を導入した所、ssh-agent.exe の不具合は解消しました。

スポンサーリンク

~/.ssh/config の内容も KeePassXC で管理する

Linux 特有という話ではありませんが、~/.ssh/config に登録している Host の情報も KeePassXC で管理すると、更に便利になりました。

$ cat ~/.ssh/config
Include conf.d/*

$ ls ~/.ssh/conf.d
github.config  lolipop.config

$ cat ~/.ssh/conf.d/lolipop.config
Host lolipop
   HostKeyAlgorithms +ssh-rsa
   UpdateHostKeys no
   Hostname ssh.lolipop.jp
   User lolipop-username
   Port 2222

元の ~/.ssh/config には ~/.ssh/conf.d 以下のファイルを読み込むようにして、~/.ssh/conf.d ディレクトリ内に各接続先毎の情報を入れておきます。上の例だと lolipop.config を KeePassXC のエントリ内に一緒に入れて置く事で、user 名やサーバー名も一緒に管理できるようになります。

各接続先毎の config ファイルを ssh を使用する環境の ~/.ssh/conf.d ディレクトリ以下に保存すれば、そのまま Host に指定した名前で接続できるようになります。

スポンサーリンク

方法1 : Linux で KeePassXC を使用する

仮想環境の Hyper-V で使用している Ubuntu 22.04 で試してみます。

$ lsb_release -a
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:        22.04
Codename:       jammy

最もシンプルな方法は、Linux でも KeePassXC を使用する事です。

Windows11 の環境と同様に、Linux でも ssh-agent が動作していれば、 KeePassXC の起動・停止に合わせて、鍵の情報も登録・消去されます。

試しに、パスワードデータベース (*.kdbx) を Ubuntu にコピーして、KeePassXC をインストールして起動してみました。設定 -> SSH エージェントの 「SSH エージェント統合を有効にする」のチェックは入れておきます。

Ubuntu 上の KeePassXC の設定画面
# ssh-agent は予め起動しておく
$ eval `ssh-agent`
Agent pid 2843

# KeePassXC を起動する前は鍵情報が無い
$ ssh-add -l
The agent has no identities.

# KeePassXC を起動すると鍵情報が登録される
$ ssh-add -l
256 SHA256:XXXXXXXXXXXXXXXXYYYYYYYYYYYYYZZZZZZZZZZZZZZ hiro20180901 (ED25519)
256 SHA256:XXXXXYYYYYYYYYYYYYZZZZZZZZZZZXXXXXXXXXXXXXX user@host (ED25519)


# lilopop は config で登録済み
$ ssh lolipop
[lolipop-username@server ~]$ exit

ログアウト
Connection to ssh.lolipop.jp closed.

# github は config で登録済
$ ssh -T github
Hi username! You've successfully authenticated, but GitHub does not provide shell access.

# KeePassXC を終了すると鍵情報も消去される
$ ssh-add -l
The agent has no identities.

Windows11 上で KeePassXC を使用するのと同様です。おそらく MacOS でも同様だと思います。

方法2 : リモートの Linux の ssh でローカルの ssh-agent 鍵情報を使用する

この先の検証は、Ubuntu 20.04 で行います。理由は先の検証で記載した通りです。

WSL2のOpenSSH Agent Relayが動かなくなったので調査した
$ lsb_release -a
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.3 LTS
Release:        20.04
Codename:       focal

Windows 側で使用している ssh-agent の情報を Linux 側に渡すには、ssh の -A オプションを使用するのが簡単です。リモート側では ssh-agent を起動する必要はありません。

ssh-agent転送のトラブルシューティング - Qiita
ssh-agent転送(Agent Forwarding)がうまく動かない、というトラブルにたまに遭遇しては毎回悩んでいる気がしたのでまとめてみます。ssh-agent転送の概要ssh-agen…
SSHのForwardAgentでローカルPCの鍵をサーバで使う
前回は macOS の ssh-agent で SSH 鍵のパスフレーズの入力を省略する方法を解説しました。 今回はその ...

ただ、どちらにも「用法・用量を守って正しくお使いください」と書かれていますので (リモート側の root 権限を持った人には秘密鍵情報を勝手に使われてしまう)、注意が必要です。

# Windows11 ターミナルの cmd.exe から
# Hyper-V の Ubuntu 20.04 へログインする
>ssh -A hiro@172.22.n.n
hiro@172.22.n.n's password:

# ssh-agent の情報が Ubuntu 側にも渡される
$ ssh-add -l
256 SHA256:XXXXXXXXXXXXXYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZ username@hostname (ED25519)
256 SHA256:XXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYZZZZZZZZZZZZ hiro20180901 (ED25519)

# ~/.ssh/config 等で Host の情報を登録してあれば
# パスフレーズなしでログインできる
$ ssh lolipop
[lolipop-username@server ~]$ exit
ログアウト
Connection to ssh.lolipop.jp closed.

# github も同様
$ ssh -T github
Hi username! You've successfully authenticated, but GitHub does not provide shell access.

ssh の -A オプションを使用する事により、Windows11 の OpenSSH ssh-agent の情報がリモートの Ubuntu 20.04 側でも使用できるようになりました。

Windows11 の OpenSSH ssh-agent が最新の ssh に対応していない件

先程も記載したリンク先の情報によれば、Windows側の OpenSSH ssh-agent が原因のようです。

WSL2のOpenSSH Agent Relayが動かなくなったので調査した

仮説: 現状のWindows側のOpenSSH Serviceが session-bind@openssh.com に対応していない?

https://zenn.dev/qnighy/articles/8b992970b86653

本家 ssh で対処するのは違うような気もしますし、このままでは Ubuntu 22.04 以降では Windows11 側の ssh-agent の鍵情報は受け取られなくなりそうです。対処方法を考えなくては。

WinSSH-Pageant で少しすっきりしたかと思いましたが、Windows の ssh 周りの混沌はまだ続きそうです。

まとめ

KeePassXC の ssh 秘密鍵の情報を Linux で使用する手段として、

  • パスワードデータベースのファイルを Linux で準備して、KeePassXC を Linux で起動する
  • Windows11 から ssh を -A オプションを使用してリモートの Linux にログインし、Windows11 側の ssh-agent の鍵情報を使用する

の二つの方法を試しました。

一つ目の方法は、Linux をメインに使用する場合には、Windows11 で使用するのと完全に同じ条件で使用する事が出来ます。

二つ目の方法は、KeePassXC から Windows11 の ssh-agent に渡された鍵情報を、Linux で使用する事が出来ます。ただし、Windows11 の OpenSSH ssh-agent の制限から、Linux の新しめの ssh では使用できません。対処方法を考え中です。

これまで、5回に渡って KeePassXC のエントリに保存した ssh の秘密鍵を Windows11、WSL2、Pageant 対応クライアント、MSYS2 (Git for Windows)、Linux で使用する方法を試してみました。Windows 周りの ssh の鍵管理は未だ混沌としている状況には変わりありませんが、少しでも皆さんの助けになれば幸いです。

今回のアイキャッチ画像

崖の絵を Stable Diffusion に描かせてみました。大きさは 1200 x 630 に変更しています。こういう絵だと縦横のリサイズ量が違っても、あまり違和感ありません。

コメント

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