Github SSH Key 创建注册流程
约 1609 字大约 5 分钟
2026-08-09
什么是SSH Key?
借用豆包小姐姐的一句话:“SSH Key是一套非对称密钥,分为:私钥、公钥,用于做SSH认证登录,代替密码登录”。 展开来说就是SSH协议做远程登录时需要验证登录用户的身份,可以使用密码登录,也可以在利用非对称密钥的认证特性进行登录。 什么叫非对称密钥的认证特性呢? 当我们使用工具生成一对私钥和公钥的时候,私钥和公钥具有以下两个特性:
- 私钥加密的内容只能用公钥解密
- 公钥加密的内容只能用私钥解密
不只是解密和加密特性,当我们引入了椭圆曲线函数的签名和验签方法的时候就变成:
- 同一段信息,用私钥生成的签名只有对应的公钥才能解签
- 同一段信息,用其他私钥生成的签名,对应的公钥不能成功解签
所谓签名,就是 使用消息、公钥、私钥通过椭圆曲线函数生成的一段文本,这个文本可以使用公钥和消息进行解签 所谓解签,就是 使用消息、公钥以及签名通过数学公式验证签名是否使用对应的私钥生成
注意:ed25519的签名和解签不单单使用公私钥的非对称加密解密特性,也结合了椭圆曲线函数的相关特性
我们也可以通过如下的例子来理解
- 首先我们将可以通过搭建TCP连接,将我们的公钥传递给需要认证我们身份的目标主机(这一步加密与否都无关紧要,重要的是公钥必须确定来自于认证方,而不被篡改)
- 这时有一个陌生的主机向目标主机发起连接说:“我是这个公钥所对应的私钥的持有方,我要用私钥进行验证我的身份。”
- 目标主机收到这个请求,于是就生成一段字节串
challenge_nonce,以及本次会话的session_id,把这些数据通过TCP通道传输过去。告诉他:“可以啊,你用你的私钥对这些数据生成一个数字签名,再发给我,我自己判断你是不是在说谎”。 - 陌生主机收到这些数据后,就立刻开始生产数字签名,数字签名需要:1. 先对签名的目标文本做一次
SHA256哈希算法,得到目标文本的摘要字符串hash_val;2.使用私钥调用ed25519算法对哈希值生成数字签名 - 目标主机接收到这个数字签名后,再利用自己的文本数据和公钥调用
ed25519的解签算法,如果验证成功,那么说明陌生主机就能成功登录,验证失败就该断开TCP连接,和这个来者不善的陌生人说拜拜了!
实际上上述的例子大概就是SSH协议在使用公私钥进行验证的具体流程
如何快速生成SSH Key
我们可以通过系统内置的命令ssh-keygen指定加密套件以及邮箱信息来生成
ssh-keygen -t ed25519 -C "yourEmail@email.com"输入完成后会生成一对用于ED25519解签验签的公私钥,同时询问你存放的位置,这里默认就会存放在用户的~/.ssh目录下 同时也会要求你对自己的私钥设置私钥口令passphrase,这个私钥口令是为了防止你的私钥在内存中明文存放被他人获取而导致暴露 设置私钥口令后,私钥就会使用私钥口令加密存在磁盘中,要使用私钥文件,就必须通过私钥口令解密后再加载到内存中使用,更加安全也更繁琐,当然你也可以跳过
以上步骤做完之后,你就得到你的SSH 公私钥对了
之后你只需要在远程服务器配置好ssh服务的设定,把公钥复制进入放到~/.ssh/authorized_keys中,设置文件读写权限为600 再在ssh的配置文件中开启密钥登录,就可以愉快的使用本地私钥进行ssh连接了 
使用SSH Agent自动管理SSH Key的输入
有了公私钥确实比每次登录都要复制一大串看不懂的密码要方便多了,但是不觉得每次都要-i然后写私钥的地址也特别麻烦吗? 懒人总是有自己的办法,特别是程序员! 于是就有人做出了ssh-agent,你只需要启动这个服务,同时在他的配置文件中配置好你登录目标主机的IP或者域名,以及对应的你本地私钥的文件地址。 你以后每一次使用SSH去访问这些目标主机,它都会贴心的帮你把长长的一串-i your_private_key_url自动写上 也就是说,你只管登录,密钥和认证,就交给ssh-agent!
# 这个命令会启动ssh-agent进程,同时输出这个进程的pid
eval "$(ssh-agent -s)"
#创建配置文件,在这里填写目标主机以及对应的私钥等配置信息
touch ~/.ssh/config
open ~/.ssh.config一般的配置模版是:
Host domainName/IP
AddKeysToAgent yes
IgnoreUnknown UseKeychain
IdentityFile yourIdentityFilePath这份配置模版配置了私钥的地址,同时将私钥交付给Agent进行管理,适用于不配置passphrase的SSH Key
最后执行ssh-add命令
ssh-add your-identity-file-path接下来就可以畅快的使用ssh命令直接连接主机了 
Github使用示例
Github使用SSH连接也是同样的道理。
- 生成公私钥,同时在把私钥交给
ssh-agent进行管理,这里注意Host要填写github.com - 在github的网站上登录你的账户,在设置中添加ssh key,同时将你的公钥内容复制进入你的新ssh key中
- 接下来你就可以使用
git@github.com:your-github-name/repository-name.git愉快的拉取你的仓库,设置其为远程地址了