LoginSignup
0
1

More than 1 year has passed since last update.

[Ubuntu 20.04] gpg-agentを利用してsvnのパスワードを保存する

Last updated at Posted at 2022-04-19

筆者の環境の説明

  • 筆者は、ローカルにあるWindows端末からLinux端末(Ubuntu)にSSH接続し、開発を行っている。
  • さらに、ソースコードなどを保存するリポジトリとしてsubversion(svn)を利用している。

問題発生の経緯

  • 先日まで、Ubuntuのバージョンは18.04を利用していた。
  • 18.04を利用していたときは、「gnome-keyring」にsvnのパスワードを保存していて、$ svn upなどのコマンドを実行する際に、「gnome-keyring」のパスワードを入力する必要があった。
    • ただし、「gnome-keyring」のパスワードの入力は毎回必要なわけではなかった。
    • (おそらく)ログインした後の初回にのみ必要な感じで、SSH接続したターミナルで一度認証すれば、それ以降にパスワードの入力は不要であったため、少々煩わしさはあったがこの状態で運用していた。
  • 先日、Ubuntuのバージョンを18.04から20.04にアップグレードした。
  • すると、$ svn upするたびに毎回「svn」のパスワードが求められるようになってしまった。
  • さすがに毎回「svn」のパスワード入力するのは煩わしすぎたため、問題に対処することにした。
  • 原因を探っていくと、どうやら「gnome-keyring」に保存されているパスワード情報を上手く利用できていないようであることがわかった。
    • $ seahorseコマンドで「パスワードと鍵」を立ち上げると、パスワードがロックされている状態で、これを解除することができなかった。(パスワードの削除は可能、作成は不可だった。)
    • この原因はよくわからなかった。どこかで設定したセキュリティポリシーの影響もあるかもしれないし、SSH接続では解除できない仕様になったのかもしれない。
    • ちなみに$ sudo seahorseを実行して立ち上げた「パスワードと鍵」では、パスワードを保存することができた。
      • $ sudo svn upとsudoを付けてコマンド入力した場合のユーザーやアドレス情報は、このrootの「パスワードと鍵」に保存されるようだ。

解決策

  • どう頑張ってもリモート接続している限りは「gnome-keyring」の問題を解決できそうになかったので、「gpg-agent」によるパスワードの保存を利用することを考えた。
  • 理由は、svnの設定などが~/.subversion/に保存されているのだが、~/.subversion/configを見ると、以下のようにLinuxの場合は3つから選べるようになっていたためである。
    • 後になってわかったことだが、使用しているUbuntu-20.04では「gpg-agent」が利用できない状態だった(インストールされていなかった)ため、次点の「gnome-keyring」が利用されていたようである。
~/.subversion/config
[auth]
### Set password stores used by Subversion. They should be
### delimited by spaces or commas. The order of values determines
### the order in which password stores are used.
### Valid password stores:
###   gnome-keyring        (Unix-like systems)
###   kwallet              (Unix-like systems)
###   gpg-agent            (Unix-like systems)
###   keychain             (Mac OS X)
###   windows-cryptoapi    (Windows)
# password-stores = gpg-agent,gnome-keyring,kwallet
$ sudo apt install gnupg-agent
  • 次に「pinentry-tty」をインストールし、これが利用されるように構成する。
$ sudo apt install pinentry-tty
(略)
$ echo "pinentry-program /usr/bin/pinentry-tty" >> ~/.gnupg/gpg-agent.conf
$ gpg-connect-agent reloadagent /bye
OK
  • ~/.bashrcに以下の内容を記載する。
~/.bashrc
GPG_TTY=$(tty)
export GPG_TTY
## 参考先には、以下も記載されていたが、ログイン時に
##「gpg-agent: gpg-agentは既に実行されています - 新しいものをスタートさせません」と表示されたので、
## おそらく不要だと思われる。以下の動作確認でもコメントアウトした状態で動作した。
# eval $(gpg-agent --daemon)
  • ~/.subversion/configの該当箇所を以下のように編集する。
~/.subversion/config
[auth]
password-stores = gpg-agent
  • ~/.subversion/serversの該当箇所を以下のように編集する。
~/.subversion/servers
[global]
store-passwords = yes
store-plaintext-passwords = no
  • ここまで完了したら、既にチェックアウトしてあるローカルのディレクトリのどこかで$ svn upを実行する。
  • すると、初回の認証情報が求められるが、以降は求められなくなり、無事問題は解決された。
0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1