在启动时将 ssh-agent 包含在 .profile 中

在启动时将 ssh-agent 包含在 .profile 中

我使用的是 20:04 桌面,并添加了一些代码来.profile启动ssh-agent。如果存在此代码,我会收到一条看似虚假的错误消息,提示发生了错误。该脚本实际上似乎已正确运行,并且正确的内容已加载到 ssh-agent 中并可用。唯一的问题是错误消息。我添加的代码.profile如下所示:

SSH_ENV="$HOME/.ssh/agent-environment"

function start_agent {
     OLD_UMASK=$(umask 077); /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"; umask ${OLD_UMASK}
     source "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add "$HOME/.ssh/jfgphylis" </dev/null
   return $ret
}

# Source SSH settings, if applicable

if [ -f "${SSH_ENV}" ]; then
    . "${SSH_ENV}" > /dev/null
    #ps ${SSH_AGENT_PID} doesn't work under cywgin
    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi

有人能解释我为什么会出现这种情况吗?有什么解决方法吗?

答案1

事实证明,运行的环境.profile有点挑剔,它会将 stderr 上的任何输出都视为错误。该命令ssh-add使用 ,stderr就像它是 一样,stdout并告诉世界哪些内容SSH keys已加载到 中ssh-agent。通过以ssh-add以下方式调用,环境认为一切正常。

ssh-add key1 key2 1>&- 2>&-

这样做的目的是关闭任何给定命令的stdoutstderr。这是抑制所有输出的最有效方法。

相关内容