文章目录
-
- SSH私钥的文件结构
-
- [1. `id_ed25519` 是一个文件](#1.
id_ed25519是一个文件) - [2. 本地可以有多个私钥文件](#2. 本地可以有多个私钥文件)
- [3. 每个私钥都有独立的文件](#3. 每个私钥都有独立的文件)
- [4. SSH如何知道有哪些私钥文件](#4. SSH如何知道有哪些私钥文件)
- [5. 查看你本地的所有私钥](#5. 查看你本地的所有私钥)
- [6. 私钥文件的内容示例](#6. 私钥文件的内容示例)
- [7. 最佳实践:使用多个私钥](#7. 最佳实践:使用多个私钥)
- [8. 调试SSH使用的私钥](#8. 调试SSH使用的私钥)
- [1. `id_ed25519` 是一个文件](#1.
- 总结
SSH私钥的文件结构
1. id_ed25519 是一个文件
~/.ssh/id_ed25519是私钥文件~/.ssh/id_ed25519.pub是对应的公钥文件- 每个密钥对都存储在两个独立的文件中
2. 本地可以有多个私钥文件
SSH支持同时存在多个不同类型的私钥文件,通常包括:
bash
~/.ssh/
├── id_ed25519 # Ed25519算法私钥(现代推荐)
├── id_ed25519.pub # 对应的公钥
├── id_rsa # RSA算法私钥(传统)
├── id_rsa.pub # 对应的公钥
├── id_ecdsa # ECDSA算法私钥
├── id_ecdsa.pub
├── github_key # 自定义命名的私钥(比如用于GitHub)
├── github_key.pub
├── work_server_key # 另一个自定义私钥
└── work_server_key.pub
3. 每个私钥都有独立的文件
重要概念 :SSH的每个私钥都存储在单独的文件中,而不是所有私钥放在一个文件里。
常见的私钥文件命名模式:
bash
# 默认命名(按算法类型)
~/.ssh/id_ed25519 # Ed25519算法
~/.ssh/id_rsa # RSA算法
~/.ssh/id_ecdsa # ECDSA算法
~/.ssh/id_dsa # DSA算法(已过时)
# 自定义命名(推荐用于不同用途)
~/.ssh/github_ed25519
~/.ssh/work_server_rsa
~/.ssh/personal_laptop_key
~/.ssh/aws_instance_key
4. SSH如何知道有哪些私钥文件
当执行 ssh root@server 时,SSH客户端会:
-
检查默认私钥文件(按优先级顺序):
~/.ssh/id_ed25519~/.ssh/id_ecdsa~/.ssh/id_rsa~/.ssh/id_dsa
-
检查ssh-agent中加载的密钥:
bashssh-add -l # 列出已加载到agent的密钥 -
检查配置文件指定的密钥:
bash# ~/.ssh/config Host server1 IdentityFile ~/.ssh/work_server_key Host github.com IdentityFile ~/.ssh/github_ed25519
5. 查看你本地的所有私钥
要查看你本地有哪些SSH私钥文件:
bash
# 列出所有私钥文件(通常以id_开头或没有.pub后缀)
ls -la ~/.ssh/
# 或者更精确地查找
ls -la ~/.ssh/id_*
ls -la ~/.ssh/* | grep -v '.pub$' # 排除公钥文件
6. 私钥文件的内容示例
私钥文件内容示例(id_ed25519):
bash
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
...(长字符串)...
-----END OPENSSH PRIVATE KEY-----
公钥文件内容示例(id_ed25519.pub):
bash
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK... user@hostname
7. 最佳实践:使用多个私钥
强烈建议为不同用途使用不同的私钥:
bash
# 生成新的私钥(不要覆盖现有的)
ssh-keygen -t ed25519 -f ~/.ssh/github_key -C "github@example.com"
ssh-keygen -t ed25519 -f ~/.ssh/work_server_key -C "work@example.com"
# 配置 ~/.ssh/config
Host github.com
User git
IdentityFile ~/.ssh/github_key
IdentitiesOnly yes
Host work-server
HostName work.example.com
User admin
IdentityFile ~/.ssh/work_server_key
IdentitiesOnly yes
8. 调试SSH使用的私钥
要查看SSH连接时具体使用了哪个私钥:
bash
ssh -v user@server
# 在输出中寻找:
# debug1: Offering public key: /home/user/.ssh/id_ed25519 ED25519 SHA256:xxx
# debug1: Server accepts key: /home/user/.ssh/id_ed25519 ED25519 SHA256:xxx
总结
- ✅
id_ed25519是一个私钥文件 - ✅ 本地可以有多个私钥文件,每个文件存储一个私钥
- ✅ 每个私钥都有独立的文件,不是所有私钥放在一个文件里
- ✅ 常见的私钥文件 :
id_ed25519,id_rsa,id_ecdsa等 - ✅ 推荐做法 :为不同服务器/用途创建不同的私钥文件,并通过
~/.ssh/config管理
这样设计的好处是安全性更高(一个私钥泄露不会影响其他服务),也更便于管理不同的访问权限。