参考文章
方法
与远程仓库的交互推荐通过 ssh 协议。还有一种token方式也可以,自行研究一下。
sshkey的方式是一个 public key 一个 private key。
一个在你的本地,一个在远程服务器上。
一个锁,一个钥匙。
一个钥匙打开你在互联网上所有的锁。
一、生成 Ed25519 密钥
现在推荐使用 Ed25519 算法生成密钥,相比传统的 RSA,它的密钥更短、性能更好、安全性也更高:
| |
-t ed25519:指定密钥类型为 Ed25519-C:添加注释,通常填邮箱方便识别-f:自定义保存的文件名,方便按用途区分多把 key

执行后会依次提示:
- 保存路径:直接回车使用默认路径
~/.ssh/id_ed25519,或者自定义一个路径 - passphrase(密钥口令):不要密码就一直回车;要密码的话执行命令以后要输入两遍,之后每次用这把钥匙都要输入这个密码
一般会生成两个 key,一个没有密码一个有密码,取不同的文件名区分。
生成完成后会得到一对密钥:
id_ed25519(或自定义文件名)—— 私钥,就是你的钥匙,永远不要分享给任何人,也不要跨平台复制/共享,别公开到公网上——放到公网上就是谁都有你的钥匙,你的代码可以随意被人读取和修改id_ed25519.pub(或xxx.pub)—— 公钥,需要添加到 GitHub / GitLab 等平台
保存到你认为安全的位置,不管多少设备都可以用同一套 key。
二、配置 ~/.ssh/config
~/.ssh 目录下有一个核心配置文件,文件名就是 config(没有扩展名)。用于 Git 推送的 SSH 配置,以 GitHub 为例:
| |
Host:为这份配置起的别名,通常直接写域名HostName:实际连接的服务器地址User:Git 服务普遍固定为gitIdentityFile:指向上一步生成的私钥路径
如果你有多个平台(GitHub、GitLab、公司自建仓库等),可以在同一个 config 文件里继续追加多个 Host 块,分别指定各自的 IdentityFile。
如果需要走代理才能连上(比如公司网络限制),可以加一行 ProxyCommand:
| |
不需要代理日志信息的话,移除 --verbose。
参考配置文件 ssh client config
三、把公钥添加到远程平台
打印公钥内容并复制:
| |
将输出内容粘贴到 GitHub 的 Settings → SSH and GPG keys → New SSH key 页面保存。
四、测试连接
配置完成后,使用以下命令测试是否连接成功:
| |
如果看到类似 Hi <username>! You've successfully authenticated... 的提示,说明 SSH 配置已经生效。
五、正确的文件权限(Linux)
在 Linux 上(我常用的是 Debian),如果用普通用户登录,SSH 对目录和文件的权限要求比较严格,权限不对会导致密钥被 SSH 忽略甚至拒绝连接。
1. .ssh 目录本身只能自己访问:
| |
2. 私钥文件只能自己读写:
| |
这里的 id_ed25519 就是上面生成的私钥文件,公钥(.pub 结尾)权限相对宽松,644 即可,一般不需要额外处理。
| 路径 | 建议权限 | 说明 |
|---|---|---|
~/.ssh | 700 | 目录仅所有者可读写执行 |
~/.ssh/id_ed25519(私钥) | 600 | 仅所有者可读写 |
~/.ssh/id_ed25519.pub(公钥) | 644 | 可以被其他人读取 |
~/.ssh/config | 600 | 避免被其他用户篡改 |
总结
- 生成一个 ed25519 的 key
- 把 public key 放到 GitHub,private key 放到本地
- 写 ssh config
- 用
ssh -T测试连接 - 校正
.ssh目录与文件权限
按照「生成密钥 → 配置 SSH → 添加公钥 → 测试连接 → 校正权限」这五步,几分钟就能在一台新机器上重新用上熟悉的 Git 和远程仓库。