# ssh-agent 的工作原理

简化流程:

[用户] -> ssh 命令 -> [ssh-agent] -> [私钥] -> [服务器]
  1. 用户运行 ssh user@host
  2. SSH 客户端向 ssh-agent 请求签名(用私钥完成挑战响应)。
  3. ssh-agent 返回签名,完成认证。
  4. 私钥不会被发送到服务器;通常也不会被明文写入磁盘。

# ssh-agent 的主要命令

# 启动服务

  • Linux/macOS:
eval "$(ssh-agent -s)"
  • Windows(PowerShell):
Start-Service ssh-agent

# 添加私钥

ssh-add ~/.ssh/id_rsa        # Linux/macOS
ssh-add C:\Users\28058\.ssh\id_rsa   # Windows
  • 第一次添加会要求输入私钥密码(passphrase)
  • 添加后在当前 session 内通常无需再次输入密码

# 查看已加载密钥

ssh-add -l
  • 显示 agent 中已缓存的公钥指纹

# 删除密钥

ssh-add -D   # 删除 agent 中的所有密钥
ssh-add -d ~/.ssh/id_rsa  # 删除指定密钥

# Windows 上的 ssh-agent 服务

# 4.1 服务特点

  • Windows 的 ssh-agent 是一个系统服务(OpenSSH Authentication Agent)。
  • 可以设置为自动启动。
Set-Service -Name ssh-agent -StartupType Automatic
  • 启动后在后台运行,不用每次手动开启。

# 4.2 常见命令

  • 启动服务:
Start-Service ssh-agent
  • 查看服务状态:
Get-Service ssh-agent
  • 添加私钥:
ssh-add C:\Users\28058\.ssh\id_rsa
  • 查看已加载密钥:
ssh-add -l

# 优势

  1. 免密体验

    • 解锁一次私钥后,在同一 session 或服务周期内通常无需重复输入 passphrase。
  2. 安全

    • 私钥主要在本机使用,常驻内存,不会被传输到服务器。
  3. 支持多密钥

    • 可以同时缓存多把私钥,适合管理多个服务器或 GitHub、GitLab 等不同账号。
  4. 与 SSH 配置结合

    • 配合 ~/.ssh/config 可以针对不同 host 自动选择对应私钥。