🔐
Systemd user serviceで起動したssh-agentをfish shellで使う
はじめに
地味にハマったのでメモしておく。
環境は、Arch Linux (x86-64) 。他のディストリビューションでも同様だと思われる。
ssh-agent as systemd user service
.config/systemd/user/ssh-agent.service
として以下の内容のファイルを作る
[Unit]
Description=SSH key agent
[Service]
Type=simple
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK
[Install]
WantedBy=default.target
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
に以下のように書いた
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
したときソケットが表示されますか?
ls -l $SSH_AUTH_SOCK
srw------- 1 yakumo yakumo 0 12月 10 11:16 /run/user/1000/ssh-agent.socket=
されないなら、多分ssh-agentが起動していません。
-
printenv | grep SSH_AUTH_SOCK
で SSH_AUTH_SOCK 環境変数が表示されますか?
されない場合、 set に x が足りていません。 set -g では駄目で、 x がある必要があります。
printenvでは、exportされた変数しか表示しないので、ここに表示されないということは、ssh-agentからも変数が見えていません。
Discussion