很多人在使用github的时候,如果还是使用https的方式推送代码的话,可能会发现推送不上去,官方会建议你使用ssh的方式进行代码推送。通过ssh方式推送代码,速度更快,更高效,而且还不用每次输密码,缺点就是要在你自己的本机以及github上面做一些配置。这些配置并不难,很简单,前期花一点点时间,可以避免很多繁琐的事情。
本机生成密钥
如果你的计算机上还没有 SSH 密钥,你需要生成一对新的 SSH 密钥。
如果你是在linux机器上,直接执行以下命令,要是window机器的话,打开cmd或者powershell窗口,执行以下命令
代码语言:javascript复制ssh-keygen -t rsa -b 4096 -C "xxx"
其中字符xxx你可以任意的填写,很多人说是填写你gihtub上面的邮箱或者账号,实际不用,可以任意填写,这个就相当于注释,不用纠结这个。
代码语言:javascript复制ssh-keygen -t rsa -b 4096 -C "xxx" -f id_rsa_alittlesir
- 运行
ssh-keygen
时,系统会询问你是否要更改密钥的位置。默认位置通常是好的。 - 系统还会询问你是否要输入密码短语来保护你的私钥。输入输入密码短语是可以增加安全性,但在每次使用 SSH 密钥时都需要输入密码,可能就变得不方便了。
如果你想在一台机器上生成多个id_ras公玥的话,或者机器是你和别人共用的话,也就是说你想在一台机器上ssh到多个自己的账号,那么可以通过-f命令重命名一下生成的id_rsa文件名,记住这种方式生成的id_rsa文件是在当前目录下。比如我上面就在当前目录下生成了两个文件
代码语言:javascript复制id_rsa_alittlesir
id_rsa_alittlesir.pub
当然你可以加上路径,指定生成的目录下,记得路径要加上引号。
代码语言:javascript复制ssh-keygen -t rsa -b 4096 -C "xxx" -f "C:Usersalittlesir.sshid_rsa_alittlesir"
id_rsa_alittlesir是私玥,id_rsa_alittlesir.pub是公钥,公玥上的内容是填写在服务器上的,如果是提交到gitee或者github上面的话,就需要就那上面去配置公玥,记住,这里的意思是把公玥上的内容复制到github上,至于复制的地方,下面会说。而私玥是自己本地使用,不用动。
Github配置
本机上生成了密钥后,现在就需要到github上面去配置填写下你生成的公玥内容,以下就是详细的步骤。
1、打开github,点击setting
按钮,进入设置界面。
2、找到左侧栏的SSH keys and GPG keys
,进入SSH的界面,填写公玥相关信息。
3、点击New SSH keys
,添加SSH key的公玥
4、其中Title
随便填写,Key type
保持不变,Key
的内容就是填写你生成的公玥内容,也就是id_rsa_tianya85.pub的内容,直接复制就好。
这样你就在你的github账号上生成了一个ssh key,那么你在客户端进行推送的时候,就不需要密码了。
检查配置
添加完公玥之后,你也可以检查一下,配置是否成功了,很简单,直接通过以下命令即可。
代码语言:javascript复制ssh -T git@github.com
如果输出以下内容,那么配置就是可以的。
代码语言:javascript复制$ ssh -T git@github.com
Hi alittlesir! You've successfully authenticated, but GitHub does not provide shell access.
最后要记得,通过ssh方式clone代码的时候,HTTPS的URL你需要更改它为SSH的URL,这个在github上面是有这个的。
代码语言:javascript复制git clone git@github.com:username/repo.git
如果你的仓库当前使用的是 HTTPS URL,你需要更改它为 SSH URL。
代码语言:javascript复制git remote set-url origin git@github.com:username/repo.git
原理解释
当配置了 SSH 密钥对之后,就不需要在每次通过 SSH 连接到远程服务器时输入密码,这是因为 SSH 提供了一种基于公钥的身份验证机制。
1、密钥对生成
当在本地计算机上运行 ssh-keygen
命令时,会生成一对密钥:一个私钥(例如 id_rsa
)和一个公钥(例如 id_rsa.pub
)。私钥存储在我们的本地计算机上,而公钥则被添加到要访问的远程服务器(如 GitHub)。
2、公钥分发 将公钥上传到 GitHub 的账户设置中,告诉 GitHub 你的公钥对应于你的私钥,这是一一对应关系的。
3、认证过程 当我们试图通过SSH连接到 GitHub 时,GitHub 会发送一个只有持有相应私钥的人才能解密的信息给你的客户端。你的客户端使用你的私钥解密该信息,并将其发送回 GitHub。GitHub 验证解密后的信息与原始信息匹配,并确认它是由你的私钥解密的。如果验证成功,GitHub 就会允许你进行通信。
因为 SSH 密钥对是成对出现的,公钥和私钥之间有数学上的关联,这意味着:
- 只有私钥持有者能够解密由公钥加密的信息。
- 公钥可以自由分发,因为它不能用于解密由自己加密的信息。
因此,一旦你的 SSH 公钥已经添加到了 GitHub,并且你的私钥安全地存储在你的计算机上,你就可以通过 SSH 连接到 GitHub 而无需输入密码。
需要注意的是,如果我们在生成密钥时设置了密码短语(passphrase),那么在每次使用私钥之前,你需要输入这个密码短语来解锁私钥。为了方便起见,你可以使用 SSH 代理(如 ssh-agent
或 Pageant
)来管理私钥,这样在你的一次会话中,只需要输入一次密码短语即可。