首页 » 运维 » 基本知识 » 正文

ssh-agent 和 ssh-add

http://blog.joncairns.com/2013/12/understanding-ssh-agent-and-ssh-add/

很多时候我们要使用我们的私钥的时候,我们都需要输入我们的密码,然后才能正常的使用私钥去登陆远程主机,去git pull我们的repo, 去干一些事,但是,我们并不想每一次都输入(安全原因咱是不考虑),有没有办法能让我们输入一次,在一段时间内(或者重启),都免于再次如入我们密钥的密码?答案是肯定的,那就是我们常用的ssh-agent 和ssh-add

ssh-agent

从这个agent我们就知道这是一个代理,代理什么呢?代理我们的私钥,这个ssh-agent可以在我们的后台运行,然后我们可以通过ssh-add将我们的key加入到后台运行的ssh-agent中,这样,我们就可以使用我们的key并且不需要每次都输入密码了,如何启动呢?

我们可以在我们的.bashrc中添加如下代码:

eval $(ssh-agent) > /dev/null

 

 

但是这有一个问题,问题就是每次打开我们的shell,我们都会创建一个心的ssh-agent,久而久之我们就有好多个ssh-agent在跑了,并且每次启动一个新的,我们都需要通过ssh-add来添加我们的key,这并不是我们想要的

让我们先来看一下ssh-agent是如何工作的:

我们可以从第一个命令中得到$SSH_AUTH_SOCK and $SSH_AGENT_PID.

其中,$SSH_AGENT_PID 这个就是ssh-agent的id,我们可以通过ssh-agent -k $SSH_AGENT_PID 来干掉它

非常重要的环境变量是$SSH_AUTH_SOCK, 这个环境变量非常重要,如果这个变量有问题,你无法使用ssh-add命令来添加私钥

我们也可以在多个shell中使用同一个ssh-agent, 但是我们需要手动设定环境变量$SSH_AUTH_SOCK

好在有个人已经写好了

这个保存为:.ssh-find-agent

然后编辑我们的.bashrc

加入下面两行:

 

这样我们就不会每次都创建新的ssh-agent了

 

 

Zhiming Zhang

Senior devops at Appannie
一个奔跑在运维路上的胖子
Zhiming Zhang

Latest posts by Zhiming Zhang (see all)

本文共 1 个回复

  • lcgogo 2018/08/24 11:10

    都会创建一个心的. 应该是新的 eval $(ssh-agent) > /dev/null。应该放入代码框

Comments are closed.