筆者の環境の説明
- 筆者は、ローカルにある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
- 具体的な解決方法は以下を参考にした:
- まず、「gnupg-agent」をインストールする。
$ 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
を実行する。 - すると、初回の認証情報が求められるが、以降は求められなくなり、無事問題は解決された。