Systemd user serviceで起動したssh-agentをfish shellで使う
はじめに
地味にハマったのでメモしておく。
環境は、Arch Linux (x86-64) 。他のディストリビューションでも同様だと思われる。
ssh-agent as systemd user service
.config/systemd/user/ssh-agent.service として以下の内容のファイルを作る
1 | [Unit] |
systemctl --user enable --now ssh-agent.service で有効化しておく。ps aux | grep ssh-agent で起動しているかチェック。
fish側の設定
ここが一番メモしたかったところ。
ssh-agentを使うためには環境変数 SSH_AUTH_SOCK が export されている必要がある。.config/fish/conf.d/fish-ssh-agent.fish に以下のように書いた
1 | set -gx SSH_AUTH_SOCK "$XDG_RUNTIME_DIR/ssh-agent.socket" |
テスト
ssh-add を実行する。実行しているユーザーがSSH鍵を持っていてパスワードがかかっていれば
いつもの、SSH鍵のパスワードを尋ねるプロンプトが出る。
トラブルシューティング
ssh-add がエラー Could not open a connection to your authentication agent. を出力する。
ls -l $SSH_AUTH_SOCKしたときソケットが表示されますか?
1 | ls -l $SSH_AUTH_SOCK |
されないなら、多分ssh-agentが起動していません。
printenv | grep SSH_AUTH_SOCKで SSH_AUTH_SOCK 環境変数が表示されますか?
されない場合、 set に x が足りていません。 set -g では駄目で、 x がある必要があります。
printenvでは、exportされた変数しか表示しないので、ここに表示されないということは、ssh-agentからも変数が見えていません。