Linux中SSH密钥存储在哪里——以及如何安全地管理它们
SSH(安全外壳)是Linux生态系统中的基础工具,用于远程访问、安全文件传输、自动化和服务器管理。虽然大多数用户通过ssh命令与SSH交互,但在后台 SSH依赖于公钥和私钥对进行身份验证——特别是在无密码登录、自动化和DevOps实践至关重要的环境中。
默认SSH密钥存储位置
SSH密钥最常存储的位置是:
这指的是用户主文件夹中的.ssh目录,例如:
此目录中的常见文件:
| 文件 | 目的 |
|---|---|
| id_rsa | 默认私钥(RSA) |
| id_rsa.pub | 匹配的公钥 |
| id_ecdsa, id_ed25519 | 其他私钥(ECDSA, Ed25519) |
| id_*.pub | 对应的公钥 |
| authorized_keys | 存储允许连接的公钥 |
| known_hosts | 存储服务器指纹(主机密钥验证) |
| config | 用户特定的SSH客户端配置 |
如果您使用ssh-keygen生成密钥,默认情况下它们存储在这里,除非指定了路径。
系统范围的SSH密钥位置
SSH服务器(sshd)主机密钥
由SSH守护进程(服务器端)使用的系统范围密钥:
典型文件:
| 文件 | 目的 |
|---|---|
| ssh_host_rsa_key | 主机私钥(RSA) |
| ssh_host_rsa_key.pub | 主机公钥 |
| ssh_host_ecdsa_key | ECDSA主机私钥 |
| ssh_host_ed25519_key | Ed25519主机私钥 |
这些密钥用于识别服务器到客户端,而不是用于验证用户。
SSH守护进程(sshd)在连接期间提供主机公钥;客户端将其与~/.ssh/known_hosts进行比较。
自定义密钥位置
您可以从任何位置生成或使用SSH密钥,但必须指定路径:
您还可以通过~/.ssh/config配置多个密钥:
密钥在哪里使用?
出站(客户端)
SSH客户端默认在~/.ssh/中查找私钥。它们用于在连接到远程服务器时发起身份验证。
ssh、scp、通过SSH的rsync、git(使用SSH远程时)
📌 入站(服务器端)
服务器在以下位置查找公钥:
此文件列出了被允许登录到该特定用户帐户的公钥。
如果user_a尝试以user_b身份SSH进入服务器,则他们的公钥必须存在于~user_b/.ssh/authorized_keys中。
权限 – 对安全至关重要
正确的权限:
不正确的权限可能导致SSH忽略您的密钥或完全拒绝登录。
安全管理SSH密钥
在生成私钥时使用密码短语:
使用ssh-agent在内存中缓存解锁的密钥:
- 定期轮换密钥
- 从”authorized_keys”中删除未使用或孤立的密钥
- 每个主机/项目使用单独的密钥
- 避免在不同环境中使用root密钥
审计和调试
要查看在SSH连接期间使用了哪个密钥:
这将打印详细日志,包括尝试使用的身份文件。
要列出当前代理中加载的密钥:
要删除一个密钥:
结论
了解SSH密钥在Linux中的存储位置——以及如何安全管理它们——对系统管理员、开发人员、DevOps工程师以及在多主机或多用户环境中工作的人至关重要。
通过了解用户密钥、主机密钥和授权密钥之间的区别,您可以:
- 排除身份验证问题
- 设置安全的自动化工作流程
- 管理跨团队和系统的访问
在生产系统或云平台(例如VPS或专用服务器)上,错误管理SSH密钥可能导致严重的安全漏洞。确保遵循最佳实践并定期审计访问。
