ssh-agentをsystemdで起動する

Table of Content

広告

はじめに

ssh-agentは起動スクリプトで「eval $(ssh-agent)」とするのが一般的です。

ログイン時に「一度」だけ起動すればよいので、systemdで起動すれば要件は満たします。

本記事ではssh-agentをsystemdで起動する手順を紹介いたします。

ユニットファイルの作成

ユニットファイルの置き場所であるディレクトリを作成します。

mkdir -p ~/.config/systemd/user/

ユニットファイル~/.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

「%t」は「$XDG_RUNTIME_DIR」と同じ値となります。
通常は「/run/user/${id -u}」となります。
ソケットや名前付きパイプなどユーザ個別のデータファイルが存在するディレクトリとなります。

ssh-agentの起動

作成したユニットファイルを起動します。

systemctl --user daemon-reload
systemctl --user enable --now ssh-agent

ログインスクリプト編集

「eval $(ssh-agent)」はssh-agentとの通信用ソケットの環境変数を展開してくれますが、systemdは環境変数は展開されません。
ログインスクリプトに環境変数を次の通り追記します。

export SSH_AUTH_SOCK="${XDG_RUNTIME_DIR}/ssh-agent.socket"

秘密鍵の登録

「ssh-add」で秘密鍵を登録します。

ssh-add ~/.ssh/id_rsa

セキュリティ上の注意点

作業端末から離れる時にssh-agentを停止するケースがあります。
ssh-agentの停止は…

systemctl --user stop ssh-agent

再度開始したい場合は…

systemctl --user start ssh-agent

となります。