密匙生成

Windows 系统

创建密匙

打开 PowerShell(推荐)或 CMD,输入以下命令(记得换成你的邮箱):

ssh-keygen -t ed25519 -C "[email protected]"

你会看到的提示:

  • Generating public/private ed25519 key pair. (正在生成一对密匙…)

  • Enter file in which to save the key (C:\Users\Admin/.ssh/id_ed25519):

    • 直接按 Enter 下一步:使用默认路径。
    • 想创建“另外一个”密匙?:在这里输入一个新的路径和名字。例如输入 C:\Users\Admin\.ssh\id_ed25519_second。这样就不会覆盖你之前的旧密匙了。
  • Enter passphrase (empty for no passphrase):

    • 这是问你要不要给密匙再设个密码。直接 Enter 代表不要密码(最省事最危险)。此处输入密码不会显示

成功后,你会看到一串酷酷的字符画,这代表你的“私匙” (id_ed25519) 和“公匙” (id_ed25519.pub) 已经躺在 .ssh 文件夹里了。

Your identification has been saved in C:\Users\Administrator/.ssh/id_ed25519
Your public key has been saved in C:\Users\Administrator/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:VKmdy0LMdf+cZ/9MgutIKHNf8t6XvojNVvgRzrQgJKI [email protected]
The key's randomart image is:
+--[ED25519 256]--+
|          ..     |
|       . oo..    |
|      .oo+oo .   |
|     E .= o. ..o |
|       .S. .. *o+|
|        ..o  o B=|
|      o o.o o +.*|
|       + o =++.*o|
|          o+*+o+=|
+----[SHA256]-----+

删除密匙

在 PowerShell 中输入下面命令。这会删除所有以 id_ed25519 开头的密匙文件:

Remove-Item ~\.ssh\id_ed25519*

如果你想删特定的,就把 * 换成具体的文件名。


Linux & macOS 系统

创建密匙

打开 终端 (Terminal),输入:

ssh-keygen -t ed25519 -C "[email protected]"

提示流程:

  • Enter file in which to save the key (/Users/yourname/.ssh/id_ed25519):

    • 按 Enter:用默认的。
    • 创建第二个?:手动输入新路径,比如 /Users/你的名字/.ssh/id_ed25519_new。这样你就有两把钥匙了。
  • Enter passphrase:这是问你要不要给密匙再设个密码。直接 Enter 代表不要密码(最省事最危险)。此处输入密码不会显示

成功后会输出:

Your identification has been saved in /Users/你的名字/.ssh/id_ed25519
Your public key has been saved in /Users/你的名字/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:VKmdy0LMdf+cZ/9MgutIKHNf8t6XvojNVvgRzrQgJKI [email protected]
The key's randomart image is:
+--[ED25519 256]--+
|    . .          |
|   . o o         |
|    . + o .      |
|     . o B .     |
|      o S B .    |
|     . + @ + .   |
|      . * O o    |
|       . o +E    |
|          .o.    |
+----[SHA256]-----+

删除密匙

在终端输入:

rm ~/.ssh/id_ed25519*

如果你想删特定的,就把 * 换成具体的文件名。


连通性配置与测试

  1. 密匙生成后,你需要先把 .pub 文件里的内容复制,贴到 GitHub(一定要传带 .pub 后缀的那个文件内容!小心把私匙传上去)
    • 登入你的 GitHub。
    • 点击右上角头像 > Settings
    • 左侧选单点选 SSH and GPG keys
    • 点击 New SSH key
    • Title:取个名字(例如:MacBook)。
    • Key:把刚才复制的那串文字贴进去。
    • 点击 Add SSH key

Windows/Mac/Linux

配置 C:\Users\你的用户名\.ssh\config (Windows。确保文件名就叫 config,没有任何后缀名。司马Windows默认隐藏档案名)| ~/.ssh/config (Mac/Linux)里面没有 Github 会出现找不到可以使用密匙的问题(其实如果你使用的是默认名字 id_ed25519,即使不写 config 文件,系统也会自动尝试用这把钥匙。但是下面是最佳实践)

Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519

贴好后,回到 PowerShell | 终端 ,输入这个命令来探探路:

注意:如果你在 config 里把 Host 命名成了 my-github,那么你测试的时候就得输入 ssh -T git@my-github,而不是 [email protected]

Mac/Linux 如果配置完提示 Permissions are too open,请在终端执行: chmod 700 ~/.sshchmod 600 ~/.ssh/config

接下来会发生什么:

  1. 确认身份:如果是第一次连,会提示 The authenticity of host 'github.com' can't be established... Are you sure you want to continue (yes/no/[fingerprint])?
  2. 输入 yes:千万别只按 Enter,要打 yes 再按 Enter。
  3. 成功标志:如果看到 Hi [你的用户名]! You've successfully authenticated...,那就大功告成了!

我有好几个密匙,怎么区分?

如果你按上面的方法创建了“第二个”密匙(比如叫 id_ed25519_second),你需要告诉系统什么时候用哪一个。

  1. C:\Users\你的用户名\.ssh\config | ~/.ssh/config 配置。
# 第一把钥匙:默认账号
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519

# 第二把钥匙:比如公司账号
Host github-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_second

这样,当你需要测试第二把钥匙时,只需输入 ssh -T git@github-work 就可以了。


每次都輸入一次密碼太麻煩了,如何記住密碼?

如果你覺得每次輸入密碼太麻煩,你可以在設置密鑰密碼時,不設置直接 RETURN (如果你覺得你電腦控制權不會被偷走)

不過..我想你應該是需要密碼的,畢竟我也是這樣建議的

不妨試試 ssh-add 命令。

通過 ssh-add ~/.ssh/id_ed25519 命令,將密鑰添加到 SSH 認證代理中,這樣就可以記住密碼了。

# 你也可以:設置1小時後自動過期
ssh-add -t 1h ~/.ssh/id_ed25519

如何看到是否已經添加了密鑰/都有什麼密鑰載入了自動驗證?

ssh-add -l

shit, 我想移除密鑰自動驗證,它幾乎做什麼都不會過問我密碼(這是廢話),讓我的操作及其危險。

ssh-add -D

完成。使用 ssh-add 需要注意的是

  • 方便是因为本机已解锁 SSH 密钥,不等于仓库对所有人开放。

  • 不要在不可信机器上长期挂着 ssh-add。

  • 若希望更安全,可给密钥设密码 + 不用长期 ssh-add,每次手动输入。

  • Windows 用戶要確認 OpenSSH Authentication Agent 服務有啟動。否則照抄 ssh-add 可能遇到 agent not running(我不想寫Windows了,因為Windows開發體驗極差。我很多年沒有日常用Windows,所以寫不下去了)

它是 OpenSSH 提供的功能,而非 git

這裡涉及一個 ssh-agent 功能,顧名思義 —— 「SSH 代理」,它負責管理你的密鑰,讓你在使用時無需每次都輸入密碼。

為什麼提一嘴這個?因為目前計算機發展,出現了很多「人工智慧智能體」叫作「AI Agent」,這裡的「ssh-agent」和「AI Agent」無關


为什么是 Ed25519?

简单说,它是目前最安全、最快、而且密匙最短的算法。相比老旧的 RSA,它的“锁”更精巧,不容易被暴力破解,是目前程序员圈子里的首选。