从 cron 作业执行“ssh-add -D”不起作用

从 cron 作业执行“ssh-add -D”不起作用

我已经在 ubuntu 服务器计算机上设置了 openSSH 服务器,并将其配置为使用公钥/私钥(无密码)。我想在客户端连接到服务器时要求密码和密钥检查,因此我使用密码创建了私钥。问题是,仅在客户端第一次尝试连接到服务器时才需要密码,并且任何连续的连接(来自同一客户端)都会自动连接,而无需再次询问密码。一个例外是当客户端的计算机重新启动时,但这不是我想要的。

我对客户端的机器有完全的控制权,所以我决定使用命令“ssh-add -D”添加一个 cron 作业,这会删除客户端计算机上 ssh 代理的所有身份,这意味着客户端下次尝试时为了连接,他会被要求输入密码,就像第一次一样。我将此命令添加到一个 cron 作业中,每小时运行一次(这会让我满意,即使这意味着并非每次尝试连接都需要密码)。

不幸的是,当作业执行时它似乎没有做任何事情。我检查了该作业是否实际执行并添加了更多命令 - 虽然所有命令都按预期工作,但只有 ssh-add 似乎出现故障。

我添加了带有以下几行的 cron 作业:

user@ubuntu:~$ crontab -u user -e

然后我选择 vim 进行编辑,并添加了以下行:

* * * * * ssh-add -D

已保存。

我究竟做错了什么?

顺便说一句:我对 Linux 很陌生(使用 ubuntu),所以我可能不理解一些高级概念。如果您的答案很简单,我将不胜感激:)

答案1

通常,如果程序从 cron 运行,环境变量会有所不同,因此ssh-add找不到任何 ssh-agent。

而是调用以下脚本来尝试所有代理并$SSH_AUTH_SOCK正确设置:

#!/bin/sh
for agent in /tmp/ssh-*/agent.*; do
    export SSH_AUTH_SOCK=$agent
    if ssh-add -l 2>&1 > /dev/null; then
        # working ssh-agent found
        ssh-add -D # delete all identities
    fi
done

答案2

也许添加就足够了

AddKeysToAgent yes

到客户的.ssh/config

答案3

乔费尔的回答和吉尔的评论引导我这样做

echo $SSH_AUTH_SOCK 

从命令行,显示:

/run/user/1000/keyring/ssh

所以,当从 crontab 运行时,这对我有用:

export SSH_AUTH_SOCK=/run/user/1000/keyring/ssh && ssh-add -D

相关内容