解せぬ日記

雑な話をする

systemd-tty-ask-password-agentの使い方

TL;DR

Please enter password with the systemd-tty-ask-password-agent tool!と言われたら、別のパネルなりウィンドウなり開いて、systemd-tty-ask-password-agent --queryを実行すれば良い。

systemd-tty-ask-password-agentの使い方

Arch LinuxはSystemdを採用してて、Systemdを使ってOpenVPNとかでVPN接続するときに以下のようなメッセージが表示されることがある。

$ systemctl start openvpn@client

Password entry required for 'Enter Private Key Password:' (PID 6145).
Please enter password with the systemd-tty-ask-password-agent tool!

メッセージにはsystemd-tty-ask-password-agentを使ってパスワードを入れてねと書いてあるわけだけど、ノリでそのままパスワード入力するとパスワードがまんま表示され、タイムアウトの後に次のインプットとして入力され、実行される。

どうやってパスワードを入力すんだぜ?と思ってたら見つけた。

issue with Vpn HideMyAss / Newbie Corner / Arch Linux Forums

別のターミナル開いて実行するといいよとのこと。

$ sudo systemd-tty-ask-password-agent --query
[sudo] password for terut: 
Enter Private Key Password: ****************

入力するとこんな感じでパスフレーズが聞かれて、接続が確立した。

ちなみにもっとよいやり方がないかとドキュメントを見てみたけど、systemd-tty-ask-password-agentはこういった使い方をするものっぽい。

Ubuntu Manpage: systemd-tty-ask-password-agent - List or process pending systemd

プロセスを見ていると/usr/bin/systemd-tty-ask-password-agent --wallというのがあったんで、こいつがフォワードしてメッセージを出してるってことなのかな。

あとOpenVPNには--askpass [file]ってコマンドライン引数があってファイルにパスワードを書いてもよさそうだったけど、嫌だったので却下した。

ちなみにOpenVPNのSystemdのUnitはリスト表示するとopenvpn@.serviceってなってるんだけど、これはUnitファイルの中で引数を受け取るためで、起動はリストで表示されたものではなく、@のあとに引数を与えて起動することになる。

# systemctl start openvpn@[設定ファイル名]のような感じで、もしclient.confを読むなら
$ systemctl start openvpn@client

コマンドラインからVPN接続最高〜。