SSH Key 生成、配置与连接

参考文章

github adding a new ssh key

ssh key config

方法

与远程仓库的交互推荐通过 ssh 协议。还有一种token方式也可以,自行研究一下。

sshkey的方式是一个 public key 一个 private key。

一个在你的本地,一个在远程服务器上。

一个锁,一个钥匙。

一个钥匙打开你在互联网上所有的锁。

一、生成 Ed25519 密钥

现在推荐使用 Ed25519 算法生成密钥,相比传统的 RSA,它的密钥更短、性能更好、安全性也更高:

1
2
3
4
ssh-keygen -t ed25519 -C "your_email@example.com" -f "key_file_name"

# 一个示例
ssh-keygen -t ed25519 -C "test@example.com" -f "my_github_ed25519_key"
  • -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 为例:

1
2
3
4
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/YOUR_KEY
  • Host:为这份配置起的别名,通常直接写域名
  • HostName:实际连接的服务器地址
  • User:Git 服务普遍固定为 git
  • IdentityFile:指向上一步生成的私钥路径

如果你有多个平台(GitHub、GitLab、公司自建仓库等),可以在同一个 config 文件里继续追加多个 Host 块,分别指定各自的 IdentityFile

如果需要走代理才能连上(比如公司网络限制),可以加一行 ProxyCommand

1
2
3
4
5
Host github.com
User git
HostName github.com
IdentityFile ~/.ssh/[你的ssh_key]
ProxyCommand ncat --verbose --proxy-type socks5 --proxy 127.0.0.1:10808 %h %p

不需要代理日志信息的话,移除 --verbose

参考配置文件 ssh client config

三、把公钥添加到远程平台

打印公钥内容并复制:

1
cat ~/.ssh/id_ed25519.pub

将输出内容粘贴到 GitHub 的 Settings → SSH and GPG keys → New SSH key 页面保存。

四、测试连接

配置完成后,使用以下命令测试是否连接成功:

1
2
ssh -T git@github.com
# 输出内容可以看到你有没有成功连接。

如果看到类似 Hi <username>! You've successfully authenticated... 的提示,说明 SSH 配置已经生效。

五、正确的文件权限(Linux)

在 Linux 上(我常用的是 Debian),如果用普通用户登录,SSH 对目录和文件的权限要求比较严格,权限不对会导致密钥被 SSH 忽略甚至拒绝连接。

1. .ssh 目录本身只能自己访问:

1
chmod 700 ~/.ssh

2. 私钥文件只能自己读写:

1
chmod 600 ~/.ssh/id_ed25519

这里的 id_ed25519 就是上面生成的私钥文件,公钥(.pub 结尾)权限相对宽松,644 即可,一般不需要额外处理。

路径建议权限说明
~/.ssh700目录仅所有者可读写执行
~/.ssh/id_ed25519(私钥)600仅所有者可读写
~/.ssh/id_ed25519.pub(公钥)644可以被其他人读取
~/.ssh/config600避免被其他用户篡改

总结

  1. 生成一个 ed25519 的 key
  2. 把 public key 放到 GitHub,private key 放到本地
  3. 写 ssh config
  4. ssh -T 测试连接
  5. 校正 .ssh 目录与文件权限

按照「生成密钥 → 配置 SSH → 添加公钥 → 测试连接 → 校正权限」这五步,几分钟就能在一台新机器上重新用上熟悉的 Git 和远程仓库。

Licensed under CC BY-NC-SA 4.0
Git 系列 Git 配置

《Git 配置》系列文章

Built with Hugo
Theme Stack designed by Jimmy