2023/01/30(月)UbuntuでSSHとGPGキーのパスフレーズを記憶させる

更新日:
投稿日:

毎回パスワードを聞かれるのは面倒なのでkeychainを使って記憶させる。

確認環境

WSL2

Env Ver
keychain 2.8.5
Ubuntu 20.04.5 LTS

実機

Env Ver
keychain 2.8.5
Ubuntu 24.04.3 LTS

手順

1. keychainのインストール

sudo apt install keychain

2. keychainの設定

.zshrcに次の行を追加。

keychain -q --nogui --agents ssh,gpg --quick <SSH秘密鍵のパス> <GPG鍵のkeyid>

GPG鍵のkeyidは以下で取得可能。

gpg --list-secret-keys --keyid-format=long

3. エージェント連携をシェル設定に書く

~/.keychain配下にホスト名でHOGE-shのようなファイルができているので、これを.zshrcから読み込む。内容的にはssh-agentとkeychainが疎通するための環境設定と思われる。

具体的には以下の内容を.zshrcに追記すればよい。

source $HOME/.keychain/`hostname`-sh

最終的な.zshrcの状態としては以下のようになっていればよい。

keychain -q --nogui --agents ssh,gpg --quick <SSH秘密鍵のパス> <GPG鍵のkeyid>

source $HOME/.keychain/`hostname`-sh

hostname-sh-gpgみたいなファイルも出来ているが私の環境ではこれを読み込むと上手く動かなかったので、このファイルは指定しないほうが良さそうに見えた。

トラブルシュート

GPGのキーが見つからないエラーが出る

  • Warning: can't find DEADBEEF; skipping

上記が出た場合
~/.gnupg/gpg.confに対して以下の記述をすることで改善する可能性がある(この対策は不完全かもしれない

keyid-format LONG

GPGキーのパスフレーズのプロンプトがGUI側に出る

.zshrcに以下を追記するとCUI側に出るようになる。

export GPG_TTY=$(tty)

更新履歴

  • 2026-01-21: エージェントとの連携設定が漏れていたのを追記
  • 2026-01-19: Ubuntu実機で確認したので、その結果を記事に反映し、記事を読みやすく改良

2022/06/27(月)WSL2のUbuntuでSSHのパスフレーズを記憶させる

更新日:
投稿日:

確認環境

Env Ver
Ubuntu 20.04.4 LTS

やり方

これでシェルの起動時に毎回 SSH のパスフレーズを聞かれるようになり、以後入力が不要になる

sudo apt install keychain
cat <<'EOF' | tee -a ~/.zshrc
## Keychain
keychain -q --nogui $HOME/.ssh/<覚えさせる証明書>
source $HOME/.keychain/`hostname`-sh
EOF

2021/03/11(木)Windowsで踏み台を使ったSSH接続の設定方法

更新日:
投稿日:
  • %HOMEPATH%.ssh\configに以下のように設定すると踏み台サーバーを経由したSSH接続が可能
    • 設定は踏み台には証明書認証があるが、宛先にはないケースを想定
  • ssh target-host.devとすると踏み台経由でアクセス可能
    • ProxyCommandではssh.exeをフルパスで記述する必要がある
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host proxy.ssh-host.dev
  HostName proxy.ssh-host.dev
  User foo
  IdentityFile C:\Users\user-name\.ssh\id_rsa
  ForwardAgent yes
Host target-host.dev
  Hostname target-host.dev
  User bar
  ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe -l %r -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null proxy.ssh-host.dev -W %h:%p