我为 写了一个包装器rsync
。它连接到我的主机并$HOME
通过ssh
.我用于gpg-agent
验证ssh
。当从终端模拟器调用时,我的脚本可以工作。它使用我的 pinentry 程序提示输入我的 gpg 密钥的密码,然后通过ssh
.
现在我想在每次启动时调用它。我通常用systemd
这个。我添加了以下内容$HOME/.config/systemd/user/backup.service
:
[Unit]
Description=Back up user files on startup
After=multi-user.target
[Service]
Type=oneshot
Requires=network-online.target
RemainAfterExit=false
ExecStart=/bin/backup.sh
[Install]
WantedBy=default.target
并启用其 via systemctl --user enable backup.service
。
脚本被执行,并且每个本地部分(读/写日志文件)都工作。但是,通过ssh
使用pass
或调用进行连接gpg
不起作用。因为我从来没有收到输入密码的提示。
在启动gpg-agent
期间从脚本调用它时如何工作?systemd
最小的例子backup.sh
:
#!/bin/bash
ssh [email protected]
gpg-agent.conf:
pinentry-program /usr/bin/pinentry-gnome3
enable-ssh-support
default-cache-ttl 86400
default-cache-ttl-ssh 86400
max-cache-ttl 86400
max-cache-ttl-ssh 86400
.zshrc:
GPG_TTY=$(tty)
export GPG_TTY
unset SSH_AGENT_PID
if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
fi
gpgconf --launch gpg-agent