使用ssh-agent存储私钥的密码

使用ssh 密钥,为了安全起见,最好要给私钥设置一个复杂的密码,但是我们每次使用的时候又要输入该密码,非常麻烦。使用ssh-agent就避免了每次使用密钥的时候输入密码的麻烦,只需要在本次开机第一次打开bash的时候需要输入私钥的密码。

SSH Config

我们推荐使用ssh config进行设置。在~/.ssh/config文件中写入如下内容:

Host *
    AddKeysToAgent yes
    UseKeychain yes

即表示对于所有主机都使用agent,并且使用钥匙串。除些之外,还可能再给每一个Host使用不同的key,设置别名、用户名、端口号等。详见ssh_config

Mac

在Mac下,系统自带钥匙串,密码存储到钥匙串即可,不需要做任何设置。

Windows

使用Powershell

# Make sure you're running as an Administrator
Set-Service ssh-agent -StartupType Automatic
Start-Service ssh-agent
Get-Service ssh-agent

使用bash

在Windows下,在~/.bashrc文件(如果没有就新建这么一个文件)中加入如下两行代码:

eval $(ssh-agent)
ssh-add

该设置仅仅针对git bash有效,在其他应用中,更普遍的是使用putty的pageant(很多程序都支持),只是这需要使用putty的ppk密钥,和ssh的私钥略有不同。

Linux/(Windows WSL在~/.profile文件中添加)

在Linux下,在~/.bash_profile的后面追加如下代码:

#
# setup ssh-agent
#
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 # 此处默认添加~/.ssh/id_rsa,如果想添加其他的或者多个key可以再加
}

# 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

如果想在ssh退出时关闭ssh-agent,可以在~/.bash_logout添加如下代码

# ssh-agent
if [ -n "$SSH_AUTH_SOCK" ] ; then
 eval `/usr/bin/ssh-agent -k`
fi

注意使用这种方法由于每次ssh退出登录时都会关闭agent,在多个ssh窗口间$SSH_AGENT_PID变量可能会不同步,可以执行source ~/.bashrc解决变量同步问题。

Reference       Reference2  Reference3

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注

17 + 16 =