[ツール] SSHエージェントを Pageant から KeePassXC に乗り換えた

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

環境の作り直しがきっかけ

昨年、開発用のノートパソコンが壊れてしまい(泣)、開発環境がすべて消えてしまいました。通常であれば、移行元パソコンと移行先パソコンの両方が動いている状態で、そのまま環境を移行するのが一般的です。

しかし今回は、移行元パソコンが完全に使えないケースでした。せっかくなので、SSH環境を見直すことにしました。

以前はWindowsでOpenSSH環境を使うには、PuttyやTeraTermをインストールするのが一般的でした。PageantはPuttyに付属するエージェントなので、そのまま長年使い続けていました。鍵のロード程度の用途であれば、枯れたツールの方が安心という考えもあります。

しかし時代は変わり、Windows 11(および一部のWindows 10)では、OpenSSHクライアントが標準機能として最初からインストールされています。PowerShellからサービスを起動するだけで簡単に利用できます。

SSH秘密鍵のロード自体はWindows標準機能でも可能ですが、今回はあえてアプリで管理することにしました。理由は以下の2点です。

  • 鍵の保管場所の露出を最小限にしたい
  • 鍵の切り替えをGUIで簡単に行いたい

結果として、SSH環境は以下のように変更しました。旧 → 新

項目
SSH鍵形式PuTTY形式(.ppk)OpenSSH標準(.pem)
SSHエージェントPuTTYのPageantKeePassXC(SSHエージェント)
SSHクライアントPuTTY Windows 11標準 OpenSSH
接続先GitHub、Bitbucket、サーバーなど同じ
GITGit for Windows同じ
GITツールTortoiseGit同じ

KeePassXC とは

KeePassXCは、オープンソースのパスワード管理ソフトです。ローカル環境でログイン情報や鍵をまとめて管理できます。データは暗号化されたデータベースとして保存され、マスターパスワードで保護されます。クラウドに依存しないので、シンプルで安心して使えるのが特徴です。

さらに、SSHエージェント機能も使えるため、SSH鍵の管理にも対応しています。
パスワードと鍵を一つのツールでまとめて管理できるのが便利です。本記事ではパスワード管理は使わず、SSHエージェント機能だけ使う話となります。


セットアップ

ここでは、Windows11で、Git環境とSSH環境のセットアップまでをゴールとします。

SSHクライアントの起動

管理者権限でPowerShellを開きます。(スタートボタン右クリック > ターミナル(管理者))

# サービスのスタートアップの種類を「自動」に設定
Set-Service -Name ssh-agent -StartupType Automatic

# サービスを開始
Start-Service ssh-agent

# 起動確認
Get-Service ssh-agent
Status   Name               DisplayName
------   ----               -----------
Running  ssh-agent          OpenSSH Authentication Agent

起動しているのでOKです。

秘密鍵の作成

私の手元にあるのはPuTTy形式の鍵セットのため、KeePassXCでは使えません。またppkをOpenSSH形式に変換するにはPuTTYが必要となります。新パソコンにはPuTTYはインストールしていません。無理に古い形式(.ppk)をこねくり回すより、最新のOpenSSH形式で新しく作り直す方が確実です。

新たに鍵を新規作成します。KeePassXCのUI上には「SSH鍵を新規発行する機能はないので、PowerShellを開いて以下を実行します。

# キー作成
# 鍵のパスワードが不要の場合は、Enterキー連打でOK
# 逆にパスワードを入れた場合は、KeePassXCの「パスワード」欄 に入れることになります。
ssh-keygen -t ed25519 -C "自分のメールアドレス"

作成された鍵は以下のフォルダに2つのファイルが保存されます。

C:\Users\ユーザー名\.ssh
id_ed25519       :秘密鍵(自分で管理。極秘)
id_ed25519.pub :公開鍵(相手に渡すもの)

接続先のGitHubに公開鍵登録

https://github.co.jp/ (公式サイト)

githubのアカウントは、Free版。ブランチはPrivateで作成済の前提で進めます。

公開鍵のid_ed25519.pub をテキストエディタで開き内容をコピペする。そして、GitHubの「Settings」>「SSH keys」>「New SSH Key」でペーストし、新規登録します。

KeePassXCのインストール・設定

https://keepassxc.org/ (公式サイト)

データベース、エントリーの順に作成します。データベースの下にエントリーがぶら下がります。

データベースの作成

  • データベース用のパスワードを設定します(忘れると復旧不可です)
  • ローカルフォルダにデータベースファイルを保存します。パソコンが壊れた場合を想定して、クラウドストレージに置くのもありかもしれません。

エントリーの作成

  • タイトルは任意(例:MYSSHKEY)
  • SSHエージェントを選択

以下の設定を行います。

  • データベースを開いた際にエージェントへキーを追加する → チェック
  • データベースを閉じた際にエージェントからキーを削除する → チェック

※この2つは重要なので必ず設定します。要は、KeePassXCが起動していて、データベースが開いている状態の場合のみ、キーのロードが行われます。

  • 外部ファイルを選択し、秘密鍵を指定します
  • OKで保存します。

アプリケーション設定画面

  • 全般:システム起動時に自動起動 → チェック
  • 全般:終了せず最小化 → チェック
  • 全般:システムトレイアイコン表示 → チェック
  • セキュリティ:未操作の時間が続いたらデータベースをロックする→オフ ※任意
  • SSHエージェント:SSHエージェント統合を有効化 → チェック
  • SSHエージェント:OpenSSHを使用 → 選択
  • OKで保存します。

テスト

テスト:エージェントにキーが登録されているか確認

キーがロードされたかチェックします。PowerShellを開いて以下を実行します。

ssh-add -l
256 SHA256:xxxxxxxxxxxxxxxxx省略 ・・・成功したケース

失敗した場合は、KeePassXCがキーをロード出来ていない可能性があります。KeePassXCの起動確認、データベースのロック確認をしてください。

テスト:SSH接続確認(GitHubの例)

キーでgithubへSSH接続できるかチェックします。PowerShellを開いて以下を実行します。

ssh -T git@github.com
Hi ■■■■! You've successfully authenticated, but GitHub does not provide shell access. ・・・成功したケース

失敗した場合は、githubの公開鍵の設定が間違っている可能性があります。

Git関連

Gitのインストール

https://git-scm.com/install/windows (公式サイト)

Git for Windowsをインストールします。PowerShellを開いて以下を実行します。

# 途中でOpenSSHの選択肢がでた場合のみ、「Use external OpenSSH」を選択
winget install --id Git.Git -e --source winget

TortoiseGitのインストール

https://tortoisegit.org/ (公式サイト)

  • Git操作をUI画面及びファイルエクスプローラー統合で操作ができるツールです。
  • 本体をインストールします。例:64ビット版の「TortoiseGit-2.18.0.1-64bit.msi」
  • 本体のインストール途中でSSHクライアント選択がでた場合は「OpenSSH」を選択
  • 次に日本語パッチをインストールします。例:Japaneseの64ビット版「TortoiseGit-LanguagePack-2.18.0.0-64bit-ja.msi」
  • 日本語パッチのインストール後に日本語反映するかのチェックがあるのでオンにして完了します。

Github Desktopのインストール

https://docs.github.com/ja/desktop (公式サイト)

GIT操作はUIが必要で、Githubしか使わないよっていう方は、Github Desktopをオススメします。

以上で、セットアップは終了です。お疲れ様でした!


(余談)Github Desktopでログオフ状態でクローン失敗の件

GitHub Desktopは、GitHub DesktopからGitHubにログインしている状態でないと、SSHでのクローンに失敗します。要はログイン前提の仕様のようです。いや、ログインして使えよってツッコミはなしで・・・

クローンを押すとエラーが表示され失敗しました・・・

We couldn't find that repository. Check that you are logged in, the network is accessible, and the URL or repository alias are spelled correctly.

SSHキーアクセスなんだからGithubログインの必要ないんじゃね?と言いたいところですね。原因よくわからないのでここでのクローンはやりません。

GitHub DesktopからGitHubにログアウト状態で使いたい場合の対処方法は以下です。PowerShellを開いて以下を実行します。

# 適当なフォルダに移動
cd C:\prj\ai

# Windows 11のGitから、リポジトリをクローンする。
git clone git@github.com:githubユーザー名/リポジトリ名.git

面倒ではありますが、コマンドで実行して、クローンします。

次にGitHub Desktopを起動し、「File」>「Add local repository」> クローンしたパスを指定して、「Add repository」を押す。

    この方法で読み込んだリポジトリは、プル操作は正常動作しました。面倒くさいんで、このツールは使わないと思いますw


    コメント

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