我想自动化一个定期运行 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
如果您希望它始终运行,您可以从您那里获取它。