You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ssh-add与ssh-keygen的区别及ssh如何选择使用的私钥

ssh-add 与 ssh-keygen 的核心区别

两个工具定位完全不同,功能没有重叠:

  • ssh-keygen 是密钥生成与管理工具,核心作用是创建、修改SSH公私钥对,也支持生成密钥指纹、转换密钥格式、修改私钥密码等操作。默认执行ssh-keygen会在~/.ssh目录生成RSA算法的私钥id_rsa和公钥id_rsa.pub,它仅操作密钥文件本身,和SSH连接时的密钥加载、认证逻辑无关。

小提示:公钥部署存在一个常见误区:公钥id_rsa.pub需要添加到**服务器对应用户的~/.ssh/authorized_keys**文件中,而不是known_hosts;known_hosts是本地存储服务端公钥指纹的文件,用于校验服务器身份、防范中间人攻击。

  • ssh-add 是ssh-agent的密钥托管工具,它本身不生成、修改密钥文件,作用是将已有的私钥加载到当前运行的ssh-agent进程的内存缓存中:
    1. 私钥如果设置了密码,加载后后续SSH连接无需重复输入密码
    2. 支持从非文件路径加载私钥,比如从环境变量加载的用法:ssh-add <(echo "$SSH_PRIVATE_KEY")
    3. 使用前需要先启动ssh-agent进程:eval $(ssh-agent -s)
SSH 选择使用私钥的优先级逻辑

SSH会按照优先级从高到低尝试匹配可用私钥,直到找到服务端认可的密钥为止:

  1. 最高优先级:命令行手动指定
    使用ssh命令的-i参数显式指定私钥路径,比如ssh -i ~/.ssh/custom_key user@hostname.com,指定后会优先尝试该私钥。
  2. 第二优先级:ssh-agent缓存中的私钥
    只要当前会话的ssh-agent通过ssh-add加载过私钥,SSH会优先遍历agent中缓存的所有私钥进行匹配。
  3. 第三优先级:SSH 配置文件指定的私钥
    本地~/.ssh/config配置文件中,针对当前连接的主机配置了IdentityFile参数的话,会优先使用该配置对应的私钥,优先级高于默认路径的通用私钥。

    如果配置中同时开启了IdentitiesOnly yes,则SSH只会尝试命令行指定、配置文件指定的私钥,不会遍历ssh-agent缓存和默认路径的私钥。

  4. 最低优先级:默认路径的通用私钥
    没有匹配到更高优先级的私钥时,SSH会按顺序尝试默认路径下的常用算法私钥:~/.ssh/id_rsa、~/.ssh/id_ecdsa、~/.ssh/id_ed25519、~/.ssh/id_dsa等。

内容的提问来源于stack exchange,提问作者Santhosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:27:00