如何自动执行定期需要 ssh-key 密码的脚本

如何自动执行定期需要 ssh-key 密码的脚本

我想自动化一个定期运行 rsync 的脚本,每次运行 rsync 时都会提示输入我的 ssh 密钥密码。

我不介意在脚本开头输入一次密码。每次循环运行 rsync 命令时都无法提示我。

有没有一种干净、安全的方法来提示输入密码一次并继续使用它?

我假设的解决方案是以某种方式提示输入密码(不知道如何做到这一点)并将其存储在环境变量中,然后使用expect来使用它。但我觉得可能有一种我不知道的更简单的方法。

答案1

设置身份验证代理。即ssh-agent。它在后台运行并拦截需要身份验证的请求。当您启动代理时,它会要求您输入一次密码。它会将密码保存在内存中,每次需要身份验证时(例如,使用 SSH 登录到安装了密钥的远程主机),它都会自动插入密码。

这是启动和运行的一种方法。创建一个脚本并将其放在方便的地方(例如〜/ bin),如下所示:

start_agent ()
{
    echo "Initialising new SSH agent...";
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV};
    echo succeeded;
    chmod 600 "${SSH_ENV}";
    . "${SSH_ENV}" > /dev/null;
    /usr/bin/ssh-add
}

# Source SSH settings, if applicable
SSH_ENV=$HOME/.ssh/environment
if [ -f ${SSH_ENV} ]; then
     . "${SSH_ENV}" > /dev/null
     # ps flags are not always portable so check here if agent doesn't start
     ps -p "${SSH_AGENT_PID}" || start_agent;
else
     start_agent;
fi

然后只需获取此脚本:. ~/bin/ssh-agent-init.sh。此时系统将提示您输入密码,因此请输入密码,然后就可以开始了。

.bashrc如果您希望它始终运行,您可以从您那里获取它。

相关内容