Answers:
这是正常的。密钥代理的目的只是将解密的密钥保存在内存中,但永远不会将其写入磁盘。(这会破坏目的–为什么不只是取消保护主键呢?)
因此,每次登录时都必须解锁密钥,并且您需要自动执行此操作–在Linux上,使用pam_ssh
是一种选择。它会自动使用您的操作系统密码来解锁代理。另一个类似的模块是pam_envoy
,它的可靠性稍高一些(但需要systemd)。
这两个模块都将启动代理本身并自动加载密钥。
$SSH_AUTH_SOCK
我得到的结果是::-bash: /tmp/ssh-gT43vE99vk/agent.511
权限被拒绝,我在这里感到困惑。
echo $SSH_AUTH_SOCK
打印其值。
尝试到您的〜/ .bashrc:
if [ ! -S ~/.ssh/id_rsa ]; then
eval `ssh-agent`
ln -sf "$SSH_AUTH_SOCK" ~/.ssh/id_rsa
ssh-add
fi
export SSH_AUTH_SOCK=~/.ssh/id_rsa
登录后,仅应提示输入密码。
在OS X上,如果您决定将私钥存储在其中,则ssh-add具有一个特殊的标志来连接到钥匙串。
快跑ssh-add -K ~/.ssh/id_rsa
。
我相信这可以更全面地回答您的问题。很难找到此OS X特定标志,但是至少从OS X Leopard以来,它一直在起作用。
ssh-add -A
,它将在Keychain中添加所有密钥。此外,还创建~/.ssh/config
并添加UseKeychain yes
这样的MacOS将永远保留你的密钥,如下所述:unix.stackexchange.com/questions/140075/...
如果您的ssh密钥受密码保护,则此解决方案很方便。
上面所有答案的问题在于,如果您的私钥受到密码保护,则每次启动新终端并尝试使用私钥时,您都必须输入密码,并且最终将运行ssh-agent
in的多个副本。记忆。解决方案是在~/.bashrc
或中添加以下内容~/.zshrc
:
##### START Fix for ssh-agent #####
# Ref: http://mah.everybody.org/docs/ssh
SSH_ENV="$HOME/.ssh/environment"
function 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
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
##### END Fix for ssh-agent #####
启动终端时,这仅会要求您输入一次ssh私钥的密码。随后打开新的终端会话(或tmux冲突)将重用由以上代码段创建的ssh-agent。