web-dev-qa-db-ja.com

ターミナルからsshとgpgを使用する際に、GUIでgnomeがパスフレーズを要求しないようにします

Ubuntu Desktop 16.10 Gnome(以前は15.10でした)をインストールしてから、ターミナルを使用してSSHキーを追加したりGPGキーをインポートしようとすると、GUIポップアップボックスが表示されてパスフレーズを要求されるという事実に悩まされています。

SSHを使用して、ターミナルで新しいエージェントを起動し、キーを追加しようとすることで、この問題を回避します。そして最後に、GUIではなくTTYでパスフレーズを要求されます。

GPGを使用して学習を始めたばかりなので、回避方法がわかりません。

これを無効にして、TTYからアクセスしたときにTTYでパスフレーズを要求する方法はありますか?

this の質問の回答を読みましたが、ubuntu 12.04についてであり、上の2つの回答はうまくいきませんでした。

8
Starx

SSHとGPGは、いわゆる「エージェント」を使用して復号化された秘密鍵をキャッシュするため、ユーザーはパスフレーズを常に入力する必要がありません。デフォルトでは、この目的でプログラムpinentryを使用します。

続行する前に、コマンドラインのピン入力プログラムの例がシステムで利用可能であることを確認しましょう。 Ubuntuのリポジトリには、pinentry-curses(永久に)とpinentry-tty(Xenialから)がありますが、デフォルトではインストールされません。同じ名前のパッケージから取得できます。

Sudo apt install pinentry-curses

別のピン入力プログラムを設定する

次のいずれかの方法で、ピン入力に使用されるプログラムを調整できます。

  • (ユーザーごと)pinentry-program~/.gnupg/gpg-agent.confをコマンドラインのピン入力プログラムに設定します。 g .:

    pinentry-program /usr/bin/pinentry-curses
    

    エージェントを再起動するか、設定を再ロードする必要があります。

    gpg-connect-agent <<< RELOADAGENT
    
  • (システム全体)Ubuntuを含むすべての一般的なLinuxディストリビューションでは、デフォルトのpinentryプログラムは、実際のピン入力プログラムへのシンボリックリンクです。このシンボリックリンクのターゲットは、update-alternativesシステムによって管理されます。これを使用して、リンクターゲットをコマンドラインピン入力プログラムに変更できます。

    Sudo update-alternatives --config pinentry
    

端末の可用性に基づいたピン入力プログラムの選択

これらの方法の両方の欠点は、ターミナルなしで実行されているプログラムからSSHまたはGPGが呼び出された場合、コマンドラインピンエントリを使用できないことです。 g。グラフィカルなSFTPクライアントまたはメールユーザーエージェント。より良い方法は、Xサーバーが利用可能で端末がunが利用可能な場合にのみグラフィカルピン入力プログラムを使用することです。この目的のために、適切なピンエントリプログラムに進む前に環境を分析する小さなラッパースクリプトが必要になります。

~/.local/bin/my-smart-pinentryに次の実行可能なシェルスクリプトがあるとします。

#!/bin/sh
set -eu

# Configuration -- adjust these to your liking
PINENTRY_TERMINAL='/usr/bin/pinentry-curses'
PINENTRY_X11='/usr/bin/pinentry-x11'

# Action happens below!
if [ -n "${DISPLAY-}" -a -z "${TERM-}" ]; then
    exec "$PINENTRY_X11" "$@"
else
    exec "$PINENTRY_TERMINAL" "$@"
fi

このラッパーをピンエントリ「プログラム」として使用するには、上記のユーザーごとの方法を使用できます。 update-alternativesデータベースに追加 もできます。

10
David Foerster