ssh agent是一个密钥管理器,用来管理一个或多个密钥,为SSH客户端使用SSH key连接服务器提供代理
ssh agent的作用
当我们使用默认的公钥和私钥(id_rsa和id_rsa_pub),不需要启动 ssh-agent
1、如果客户端生成了多对密钥,那么就需要手动指定服务器对应的密钥,把私钥添加到ssh agent,ssh agent可以代理整个认证过程,不需要在config文件手动指定对应的密钥
2、当你为你的私钥设置了密码,只需要把私钥添加到ssh agent,避免密码重复输入
使用ssh agent
运行 ssh agent有两种方法,手动运行和自动启动,先看手动运行,如果报下面错误说明ssh agent没有打开
Could not open a connection to your authentication agent
手动运行ssh agent有两种方法:
-
ssh-agent $shell
也可以指定shell,如ssh-agent bash
- Windows中
eval $(ssh-agent)
ssh agent的一些常用命令:
# 手动添加私钥
ssh-add ~/.ssh/id_rsa_2
# 查看加载的密钥
ssh-add -l
# 关闭ssh agent
ssh-agent -k
ssh agent的自动启动
Linux:ssh agent 一般会自动开启
Windows:
- 在
服务
中把OpenSSH Authentication Agent
设置为自动 - 也可为
git bash
添加配置文件.bashrc
,
env=~/.ssh/agent.env
agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
agent_start () {
(umask 077; ssh-agent >| "$env")
. "$env" >| /dev/null ; }
agent_load_env
# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
agent_start
ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
ssh-add
fi
unset env