ssh-agent和ssh-add的关系

git操作技巧

一、ssh-agent是一个密钥管理器,运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管。

使用ssh-agent后,可以通过ssh-add命令向ssh-agent注册本机的私钥,ssh-agent会自动推导出这个私钥的指纹(实际上是ssh-add计算的)保存在自己的小本本里(内存),以后只要ssh连接某主机(某用户),将自动转发给ssh-agent,ssh-agent将自动从它的小本本里查找私钥的指纹并将其发送给服务端(sshd端)。如此一来,ssh客户端就无需再指定使用哪个私钥文件去连接。
总的看上去,ssh-agent的角色就是帮忙存储、查找并发送对应的指纹而已,也就是说它是一个连接的转发人,扮演的是一个代理的角色。

ssh-agent的启动,一般情况下macOS已经有此进程:
% ps -ef|grep ssh-agent
501 2489 1 0 四09上午 ?? 0:00.32 /usr/bin/ssh-agent -l

二、macOS 下使用 ssh-add 命令将SSH 密钥添加到ssh-agent 代理

三、将 SSH 私钥(id_ed25519)添加到 ssh-agent 并将密码存储在密钥链中: ssh-add -K ~/.ssh/id_ed25519

四、测试 SSH 连接之前,确认好3个工作:

1、检查现有 SSH 密钥(.ssh/目录下是否有密钥文件,通过ssh-add -l 查看已经加入ssh-agent密钥管理器的密钥)
2、生成新 SSH 密钥 (ssh-keygen -t rsa -C "fox@github.com")
3、新增 SSH 密钥到 GitHub 帐户 (在github的设置里)

 

五、测试 SSH 连接
ssh -T git@github.com
Hi fox! You've successfully authenticated, but GitHub does not provide shell access.

六、命令参数参考:

ssh-agent命令的选项:
-a bind_address
指定ssh-agent运行时绑定的Unix Domain套接字路径,默认是`$TMPDIR/ssh-xxx/agent.<ppid>`
-c
-s
指定ssh-agent运行时输出的内容(那些环境变量)是csh还是bash格式的语句
-d
调试模式
-k
杀掉`SSH_AGENT_PID`环境变量指定的pid进程
-t life
指定ssh-agent中私钥(指纹)的有效期。默认单位为秒,可以指定m(分钟)、h(小时)、d(天)、w(周)。如果不指定,则永久有效。该有效期可以被ssh-add指定的有效期选项覆盖
ssh-add命令的选项(部分选项):
-D
删除ssh-agent中所有私钥(指纹)
-d key_file
删除指定私钥
-L
列出agent当前主机上所有公钥参数,即公钥文件中的内容
-l
列出agent当前已保存的指纹信息
-t
设置私钥(指纹)的有效期。默认单位为秒,可以指定m(分钟)、h(小时)、d(天)、w(周)
-x
使用一个密码将agent锁起来(lock),锁起来的agent将不再提供任何服务
-X
解锁agent