【令和最新版】sshcontrolは使わないで!最近のGPGによるSSH認証のベストプラクティス
Technology
Published on: 2025/2/9

【令和最新版】sshcontrolは使わないで!最近のGPGによるSSH認証のベストプラクティス

GnuPG

はじめに

GnuPGユーザーがGPG鍵をSSH認証にも使おうとしたら、今までは、`sshcontrol` を`gpg-agent`に渡すという、記事やブログの内容がほとんどだと思いますし、ChatGPTやLLMを使ったボットなどもこの内容を案内していますが、いつ からか、この`sshcontrol`を使う方法は非推奨になっていました。

javascript
const hello = "world!";

> This file is deprecated in favor of the "Use-for-ssh" attribute in the key files.

> (§ sshcontrol https://www.gnupg.org/documentation/manuals/gnupg/Agent-Configuration.html )

ここでは、それらの変更に対応した新しい?方法を示します。日本語でこれが解説されてあるのはGentoo LinuxのGnuPGのwikiぐらいでしょうか。

前提

すでにsshcontrolがあっても無くてもかまいません。

- GnuPG がインストールされている

- すでに秘密鍵や公開鍵をGPGが読みこんでいる

- GPG でSSH 接続したい先に同じ公開鍵がある

準備

SSH接続したいGPG鍵のKeygripを確認してください

方法1 gpg コマンドを使う

鍵のIDや副鍵なども全て見る場合

javascript
gpg --list-secret-keys --keyid-format long --with-keygrip

鍵のIDは見なくても良い場合

javascript
gpg -k --with-keygrip

いずれにせよ、 --with-keygrip は必要ですね。

方法2 gpg-connect-agent を使う

javascript
gpg-connect-agent 'keyinfo --list' /bye

セットアップ

ssh認証にgpg-agentが関われるようにする

シェルの設定を行います。この手順自体はsshcontrol を使われていた方なら設定をしなくても良いはずです。

gpg-agentにSSH接続に使って良い鍵を教える

javascript
gpg-connect-agent 'keyattr

設定できたか確認する

javascript
gpg-connect-agent 'keyattr <登録したKEYGRIP> Use-for-ssh: ' /bye

と入力して、

javascript
D true

と出たらセットアップ終了です。

接続してみる

例えばGitHubにすでに今回登録したSSHの公開鍵を登録して、接続できるようにしている場合は

javascript
ssh -T [email protected]

で接続できます。

これで終了です!お疲れさまでした。

sshcontrol から移行するには

sshcontrol には、鍵のKeygripが書かれているはずなので、それを一行ずつ上の手順を実行すれば良いはずです。

スクリプトを組んでもいいでしょう。

トラブルシューティング

javascript
ssh -T [email protected]

に接続して、公開鍵の認証が出来ない場合は、シェルの設定の内容をもう一度確認したり、シェルからインタープリタ的に設定した後、シェルを閉じないでそのまま接続を行ってください。

また、以下のようなリセットコマンドもあります。

javascript
gpg-connect-agent reloadagent /bye

javascript
gpg-connect-agent updatestartuptty /bye

どちらも OK と帰ってきたらリセット完了です。

おわりに

お読みいただきありがとうございました。近日中に、GPGにゼロから入門し、さらにSSH鍵など、様々な応用までカバーするための記事を公開する予定です。