SSH agent的原理和使用; windows 开启 ssh-agent; unable to start ssh-agent service, error :1058 解决
下面是一些ssh agent的资料简要摘录:
ssh agent 的功能:https://www.ssh.com/academy/ssh/agent
The ssh-agent is a helper program that keeps track of user's identity keys and their passphrases.
The agent can then use the keys to log into other servers without having the user type in a password or passphrase again. This implements a form of single sign-on (SSO). The SSH agent is used for SSH public key authentication.
It uses SSH keys for authentication. Users can create SSH keys using the ssh-keygen command and install them on servers using the ssh-copy-id command.
- 用来管理用户私钥密码;用来进行公钥验证;
- 实现单点登录系统和私钥转发;SSO;在跳板机的情况下,尤为有用;
- 设计两个命令,ssh-agent 服务端,ssh-add 添加私钥;常用命令 ssh-add -l 查看当前已经加载的私钥;
SSH 推荐的登录方式是使用私钥登录。但是如果生成私钥的时候,设置了口令(passphrase)(此口令为私钥的口令),每次登录时需要输入口令也很麻烦。可以通过 ssh-agent 来管理私钥,把私钥加载进内存,之后便不用再输入私钥。
也可以手动运行,有两条命令可以用来启动:
ssh-agent $SHELL :它会在当前 shell 中启动一个默认 shell,作为当前 shell 的子 shell,ssh-agent 会在子shell中运行;也可以明确指定 $SHELL ,比如 ssh-agent bash , ssh-agent 会随者当前 ssh 会话的结束而结束,这是一种安全机制。
eval `shell-agent` , 在windows中为 eval $(ssh-agent) : 它并不会启动一个子shell,而是直接启动一个 ssh-agent 进程;
此时当我们退出当前 bash 后,ssh-agent 进程并不会自动关闭。我们可以在当前bash退出之前,使用 ssh-agent -k ,或者在当前 bash 退出之后,使用 kill 命令,关闭对应的 ssh-agent 进程。
SSH agent 可以做到防止验证私钥口令和SSH 私钥转发;
当 X 主机 登录上Y后;之后用Y作为跳板机的时候,就可以通过ssh-agent 使用X主机的私钥;这样我们在Y主机上不用保存我们私钥,达到安全的目的;
ssh-agent 代理转发:
需求:在 X 机器上运行 ssh-agent 代理来管理私钥;通过 X 机器 ssh 登录到 Y 机器;能让 Y 机器上的 ssh 客户端也能使用到所有 X 机器上的 ssh-agent 所管理的所有私钥。
原理:Y 机器上的 ssh 客户端会跟 Y 机器上 sshd 服务器请求私钥。因为已经从 X 登录到 Y 上,X 的 ssh 客户端和 Y 上的 sshd 服务器连理了一条连接。通过这条连接,请求被转发给了 X 上的 ssh 客户端,最终传递给 X 上的 ssh-agent。请求的结果反向传递回去。
ssh-add 还有其他选项可用,-d 删除已经添加的私钥;-x 锁定shell等。
参考链接:
https://blog.csdn.net/zhouguoqionghai/article/details/92134462
http://www.zsythink.net/archives/2407/
https://zhuanlan.zhihu.com/p/126117538
# 2021年11月9日 11点04分
今天重新看之前写的ssh-agent教程,感觉有点混乱,现在做一些补充:
windows 开启 ssh-agent 时,命令行会发生如下错误:unable to start ssh-agent service, error :1058
通过参考:https://stackoverflow.com/questions/52113738/starting-ssh-agent-on-windows-10-fails-unable-to-start-ssh-agent-service-erro可知,我们需要在window服务中,开启ssh-agent服务;
然后,通过 ssh-agent 运行程序;使用 ssh-add 添加默认私钥,使用 ssh-add -l 查看添加的私钥;
但是在windows上,不建议 openssh 和 ssh-agent一起使用,因为会有:
PS C:\Windows\System32\OpenSSH> .\ssh.exe -T git@github.com CreateProcessW failed error:2 posix_spawnp: No such file or directory
建议使用 git 自带的ssh; 如果github desktop 需要ssh, 请在设置里设置使用 git ssh;
保持更新,更多内容请关注 cnblogs.com/xuyaowen