思路
- 用 Systemd User Units 管理 ssh-agent 和 ssh-add, 从而管理 ssh 身份
- 配置 Git 使其默认使用某个 Key Pair 签名
让 Systemd 管理 ssh 身份
-
创建一个
ssh-agent.service来启动 ssh-agent~/.config/systemd/user/ssh-agent.service [Unit]Description=SSH key agent[Service]Type=simpleEnvironment=SSH_AUTH_SOCK=%t/ssh-agent.socketExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCKRestart=on-failureRestartSec=5s[Install]WantedBy=default.target -
创建
ssh-add.service来添加身份~/.config/systemd/user/ssh-add.service [Unit]Description=Add SSH keys to agentAfter=ssh-agent.serviceWants=ssh-agent.service[Service]Type=oneshotEnvironment=SSH_ASKPASS=/usr/bin/ksshaskpassEnvironment=SSH_AUTH_SOCK=%t/ssh-agent.socketExecStart=/usr/bin/ssh-add <可指定你的 Private Key 目录, 可以用 %h 代表家目录, 也可以缺省来加载所有>ExecStartPost=/usr/bin/ssh-add -l > /dev/null[Install]WantedBy=default.target -
添加对应环境变量
创建
~/.config/environment.d/ssh-agent.conf~/.config/environment.d/ssh-agent.conf SSH_AUTH_SOCK=/run/user/<更改为你的 User ID>/ssh-agent.socket -
启动这些 Units
Terminal window systemctl --user daemon-reloadsystemctl --user enable --now ssh-agent.servicesystemctl --user enable --now ssh-add.service
告诉 Plasma 默认使用 ksshaskpass 作为 SSH_ASKPASS
创建一个 ~/.config/plasma-workspace/env/ssh-askpass.sh, 写入对应环境变量.
#!/bin/bashexport SSH_ASKPASS=/usr/bin/ksshaskpass请登出并重新登入 Plasma, 这样才能对用户应用这些环境变量.
全局配置 Git 使用特定 Key Pair 签名
# 开启签名git config --global commit.gpgsign true# 配置签名类型为 SSHgit config --global gpg.format ssh# 配置签名密钥git config --global user.signingkey <密钥路径># 配置已允许的签名身份git config --global gpg.ssh.allowedSignersFile ~/.git-allowed-signersecho "<你 SSH Key Pair 设定的 Email> <.pub 文件内 ssh-xxx xxxxx>" >> ~/.git-allowed-signers验证
- 在你登入时 ksshaskpass 应该会向你询问 SSH Key Pair 的 passphrase
- 打开需要使用这些身份的应用时 kwallet 应该会向你询问是否允许
- 可以使用
ssh-add -l查看已被加载的 SSH 身份