有馬総一郎のブログ

(彼氏の事情)

2025年04月03日 18:41:59 JST - 4 minute read - Linux

デスクトップ版BitwardenをSSHエージェントとして使用してローカルに秘密鍵を保持せずサーバーログインやGit pushする

自宅サーバーやらGitに接続するために秘密鍵をダウンロードするのは面倒だし、セキュリティリスクがある。 Bitwardenを使えば、SSHエージェントとして使える話はなんとなく知っていたが、情報が新旧混合していて、良く分からなったので、とりあえず、挑戦してみた。

基本は Bitwarden SSH Agentにあるとおり行えば出来る。のだが、いくつか罠があったので、記しておく。

Bitwarden

まずは、設定からアプリ設定で、以下の項目にチェックする必要がある。

  • SSHエージェントを有効にする
Bitwarden

あとは、SSHキーを作成して、設定すればめでたしめでたしかとおもいきや…

Flatpak版(2025.2.1)が動かない

そもそもSSH認証ソケットが生成されないのだが、投稿にもあるとおりFlatsealで以下のようにすることでソケットが作成される。

  • Socket:: Secure Shell agent : socket=ssh-auth = ON

  • Filesystem:: Other files :

    /home/user/.var/app/com.bitwarden.desktop/data/

  • Environment:: Variables :

    BITWARDEN_SSH_AUTH_SOCK=/home/user/.var/app/com.bitwarden.desktop/data/.bitwarden-ssh-agent.sock

Flatseal
Flatseal

私の環境では、環境変数BITWARDEN_SSH_AUTH_SOCKの設定もしないとソケットが作成されなかった。また、このパスも~/を使うと上手く行かなかったのでフルパスで指定した。

しかし、SSH認証ソケットが作成されたとしても、それでも作動しない。アプリが起動していないと接続拒否(、ロック解除してたとしてもフェッチエラー…

本来は、アプリが起動していれば、ロック解除のダイアログが表示されるはずだし、ロック解除後は、認証許可のダイアログが表示される。

$ export SSH_AUTH_SOCK=/home/arimasou16/.bitwarden-ssh-agent.sock
$ ls -l /home/arimasou16/.bitwarden-ssh-agent.sock
srw------- 1 arimasou16 arimasou16 0  3月 30 06:32 /home/arimasou16/.bitwarden-ssh-agent.sock
$ ssh-add -L #Bitwarden未起動
Error connecting to agent: Connection refused
$ ssh-add -L #ロック解除後
error fetching identities: communication with agent failed

近い内に修正されるだろうが、AppImageを使うことにした。

クリップボードからのキーをインポートが上手くいかない

多くの人は、いきなりbitiwardenで秘密鍵を作って運用しするよりも、既存の秘密鍵を使おうとするだろうが、それが上手くいかない。正しくパスフレーズを入力しないとインポートできないので、正しくインポートできているかと思ったら、何度やっても失敗する。

Bitwarden
Bitwarden

“The SSH key is invalid” when using ‘Import key from clipboard’ on Windows · Issue #13151 · bitwarden/clients

@Roan-V Likely if your SSH private key file is encrypted with a passphrase, whereas upon import to Bitwarden the private key remains unencrypted leading to the differences seen

どう回避するか分からなったが、最初の投稿のFUNCTIONING WORKFLOWに書いてあった。

  1. SSH新規作成
  2. cat id_ed25519 | xsel --clipboard --inputなどして秘密鍵をクリップボードにコピーする
  3. “クリップボードからのキーをインポート"を押す
  4. パスワードを確認にパスフレーズを入力する
  5. cat id_ed25519 | xsel --clipboard --inputなどして秘密鍵をクリップボードにコピーする
  6. “インポート"ボタンを押す
  7. 秘密鍵、公開鍵、フィンガープリントなどが更新されたのを確認する
  8. 保存する

これで、既存の秘密鍵が使える。パスフレーズは不要となる(しかし、当然、Bitwardenでのロック解除、認証許可が必要となる)。

Bitwarden
$ ssh-add -L
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN9pPLbplfC+0VjkO/2Ou5050jdkVZvEJPxCDrh237YI github
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKGC4BbJLlkP7FJxVvX+VAxK0nlvT3hPZfXzwr8K8Xjg Ubuntu Server

Github

Githubで使用する秘密鍵の作成は公式どおりで上手くいく。

  1. “Add new SSH Key"画面を表示する
  2. Key typeAuthentication Keyを選択
  3. Bitwardenの公開鍵をコピーする
  4. Key入力欄に公開鍵を貼り付ける
  5. “Add SSH key"ボタンを押下する
Bitwarden

そして、git設定を更新する。

$ git config --global gpg.format ssh
$ git config --global user.signingkey "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN9pPLbplfC+0VjkO/2Ou5050jdkVZvEJPxCDrh237YI"
$ cat ~/.gitconfig
[user]
	name = arimasou16
	email = example@test.com
	signingkey = ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN9pPLbplfC+0VjkO/2Ou5050jdkVZvEJPxCDrh237YI
[gpg]
	format = ssh

そして、~/.ssh/configの設定から秘密鍵を指定したりしている場合、削除する。

Host server
    HostName 192.168.0.1
    User arimasou16
-    IdentityFile /home/arimasou16/id_ed25519
    Port 22
-    IdentitiesOnly yes
-    AddKeysToAgent yes
-Host github github.com
-    HostName github.com
-    IdentityFile /home/arimasou16/id_rsa_github
-    User git
-    Port 22
-    IdentitiesOnly yes # IdentityFile で指定した秘密鍵でのみ認証を試みる
-    Compression yes # Git でのファイル転送時に圧縮する

インポートで失敗してたり、~/.ssh/configの変更せずに認証しようとすると…githubでは以下のメッセージが表示された。

git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
[arimasou16@pop-os:~/git]$

サーバーへのログインでは、となる。ssh -v serverしてデバック表示することでどう失敗したのか分かる。

debug1: No more authentication methods to try.
arimasou16@ubuntu: Permission denied (publickey).

成功する場合、以下のようなメッセージが表示される。

debug1: Offering public key: /home/arimasou16/Nextcloud/id_ed25519 ED25519 SHA256:zDXvpBeAbOOivsqGercM4Tzz38x25A93zBcLrn6tK9o explicit
debug1: Server accepts key: /home/arimasou16/Nextcloud/id_ed25519 ED25519 SHA256:zDXvpBeAbOOivsqGercM4Tzz38x25A93zBcLrn6tK9o explicit
Enter passphrase for key '/home/arimasou16/id_ed25519':
debug1: could not add identity to agent: /home/arimasou16/id_ed25519 (-27)
Authenticated to ubuntu ([ubuntu]:22) using "publickey".

AddKeysToAgent yesにしても良くも悪くも、Bitwardenでの認証許可ダイアログが出るのが面倒といえば、面倒だが、各端末ごとに秘密鍵を保持してなくて済むのはありがたい。