Git安装使用快速上手图文教程:创建一个 SSH 密匙代码从本地推送到 GitHub

2023-05-2512:59:45后端程序开发Comments1,180 views字数 4113阅读模式

1.什么是 Git SSH 密钥

SSH 密钥是 SSH(安全外壳)网络协议的访问凭证。这种经过身份验证和加密的安全网络协议用于不安全的开放网络上机器之间的远程通信。SSH 用于远程文件传输、网络管理和远程操作系统访问。 SSH 首字母缩略词还用于描述一组用于与 SSH 协议交互的工具。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

SSH 使用一对密钥在远程方之间启动安全握手。密钥对包含公钥和私钥。私有与公共命名法可能会造成混淆,因为它们都被称为密钥。把公钥想成“锁”,把私钥想成“钥匙”会更有帮助。您向远程方提供公共“锁定”以加密或“锁定”数据。然后使用您保存在安全位置的“私钥”打开此数据。您可以使用 SSH(安全外壳协议)在 http://GitHub.com 上的存储库中访问和写入数据。通过 SSH 连接时,您使用本地计算机上的私钥文件进行身份验证。如需更多信息,请参阅“关于 SSH”。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

2.如何创建 SSH 密钥

SSH 密钥是通过公钥加密算法生成的,最常见的是 RSA 或 DSA。在非常高的层次上,SSH 密钥是通过一个数学公式生成的,该公式采用 2 个素数和一个随机种子变量来输出公钥和私钥。这是一种单向公式,可确保公钥可以从私钥导出,但私钥不能从公钥导出。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

3.在 Mac 和 Linux 上生成 SSH 密钥

OsX 和 Linux 操作系统都有全面的现代终端应用程序,这些应用程序随 SSH 套件一起提供。创建 SSH 密钥的过程在它们之间是相同的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

3.1.执行以下命令开始创建密钥文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

此命令将使用电子邮件作为标签创建一个新的 SSH 密钥文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

3.2.然后系统将提示您“输入要保存密钥的文件”。 您可以指定文件位置或按“Enter”接受默认文件位置。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

> Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]

3.3.下一个提示将要求输入安全密码。 密码短语将为 SSH 添加额外的安全层,并且在使用 SSH 密钥时都需要密码。如果有人可以访问存储私钥的计算机,他们也可以访问使用该密钥的任何系统。向密钥添加密码短语将防止这种情况。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]

此时,在之前指定的文件路径下会生成一个新的SSH key。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

3.4. 将新的 SSH 密钥添加到 ssh-agent文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

ssh-agent 是 SSH 工具包中的另一个程序。 ssh-agent 负责保存私钥。把它想象成一个钥匙扣。除了持有私钥外,它还代理使用私钥签署 SSH 请求的请求,这样私钥就不会被不安全地传递。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

在将新的 SSH 密钥添加到 ssh-agent 之前,首先确保 ssh-agent 正在运行,方法是执行:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

$ eval "$(ssh-agent -s)"
> Agent pid 59566

ssh-agent 运行后,以下命令会将新的 SSH 密钥添加到本地 SSH 代理。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

ssh-add -K /Users/you/.ssh/id_rsa

新的 SSH 密钥现已注册并可以使用了!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

4.在 Windows 上生成 SSH 密钥

Windows 环境没有标准的默认 unix shell。需要安装外部 shell 程序才能获得完整的注册机体验。最直接的选择是使用 Git Bash。安装 Git Bash 后,可以在 Git Bash shell 中执行适用于 Linux 和 Mac 的相同步骤。也可以参考这里的教程。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

4.1.输入ls -al ~/.ssh 查看之前是否生成SSH,可以进入ssh文件,说明我之前配置过文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

Git安装使用快速上手图文教程:创建一个 SSH 密匙代码从本地推送到 GitHub

有ssh相关的文件说明此前生成过文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

4.2.如果没有,检查用户名和邮箱。写了东西之后,需要本人签名。git的提交代码到远程仓库本身不允许匿名,虽然git的功能又不需要这两个参数,那么配置这个东西就是告诉其他人,你在git commit 的时候是谁在提交,以及你的联系方式(email),这里看到我已经配置好了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

Git安装使用快速上手图文教程:创建一个 SSH 密匙代码从本地推送到 GitHub

4.3.如果之前没有创建,请使用以下命令,这里配置的是全局的用户名,可以根据需要设置多个用户名文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

git config –global user.name ‘xxxxx’ 
git config –global user.email ‘xxx@xx.xxx’

4.4.然后输入下面的命令生成密钥,回车。或者$ ssh-keygen -t ed25519 -C "your_email@example.com"命令也可以,注意:如果您使用的是不支持 Ed25519 算法的旧系统,请使用:$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"。这里的邮箱可以是你之前配置user.email中的任何一个邮箱。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

Git安装使用快速上手图文教程:创建一个 SSH 密匙代码从本地推送到 GitHub

4.5.如果你只想生成一对密钥,请直接按三个回车,最后在.ssh目录下(C盘用户文件夹下)得到了两个文件:id_rsa(私有秘钥)和id_rsa.pub(公有密钥)。这个过程相当于你(user.name)去店里买了一对钥匙和锁。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

[root@localhost ~]# ssh-keygen -t rsa       <== 建立密钥对,-t代表类型,有RSA和DSA两种
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):   <==密钥文件默认存放位置,按Enter即可
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):     <== 输入密钥锁码,或直接按 Enter 留空
Enter same passphrase again:     <== 再输入一遍密钥锁码
Your identification has been saved in /root/.ssh/id_rsa.    <== 生成的私钥
Your public key has been saved in /root/.ssh/id_rsa.pub.    <== 生成的公钥
The key fingerprint is:
SHA256:K1qy928tkk1FUuzQtlZK+poeS67vIgPvHw9lQ+KNuZ4 root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|           +.    |
|          o * .  |
|        . .O +   |
|       . *. *    |
|        S =+     |
|    .    =...    |
|    .oo =+o+     |
|     ==o+B*o.    |
|    oo.=EXO.     |
+----[SHA256]-----+

4.6.通常,我们只会生成一个SSH Key,名字叫id_rsa,然后提交到多个不同的网站(如:GitHub、CodeArts或Gitee)。但如果你有多个Github账号,你也可以多买几对锁。更正一下,下面的锁放的位置前面要加上~/.ssh/这样才能保证在.ssh文件里生成。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

Git安装使用快速上手图文教程:创建一个 SSH 密匙代码从本地推送到 GitHub

4.7.现在,用你刚刚新买的锁,把你的Github账号上凿开一个门,并且上锁。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

Git安装使用快速上手图文教程:创建一个 SSH 密匙代码从本地推送到 GitHub
Git安装使用快速上手图文教程:创建一个 SSH 密匙代码从本地推送到 GitHub
Git安装使用快速上手图文教程:创建一个 SSH 密匙代码从本地推送到 GitHub
Git安装使用快速上手图文教程:创建一个 SSH 密匙代码从本地推送到 GitHub
Git安装使用快速上手图文教程:创建一个 SSH 密匙代码从本地推送到 GitHub
Git安装使用快速上手图文教程:创建一个 SSH 密匙代码从本地推送到 GitHub
Git安装使用快速上手图文教程:创建一个 SSH 密匙代码从本地推送到 GitHub

4.8.编辑~/.ssh/config文件,没有的话 touch config创建一个文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

Git安装使用快速上手图文教程:创建一个 SSH 密匙代码从本地推送到 GitHub

切到ssh目录下文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

Git安装使用快速上手图文教程:创建一个 SSH 密匙代码从本地推送到 GitHub

输入touch config生成config文件文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

Git安装使用快速上手图文教程:创建一个 SSH 密匙代码从本地推送到 GitHub

4.9.右键打开config文件,配置不同的Github账号仓库指向不同的密钥文件。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

Git安装使用快速上手图文教程:创建一个 SSH 密匙代码从本地推送到 GitHub
Git安装使用快速上手图文教程:创建一个 SSH 密匙代码从本地推送到 GitHub

大家使用Git拉取代码时候是这样的文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

原理分析
1.ssh 客户端是通过类似 git@github.com:githubUserName/repName.git ** 的地址来识别使用本地的哪个私钥的,地址中的 User 是@前面的git, Host 是@后面的github.com
2.如果所有账号的 User 和 Host 都为 git 和 http://github.com,那么就只能使用一个私钥。所以要对User 和 Host 进行配置,让每个账号使用自己的 Host,每个 Host 的域名做 CNAME 解析到 http://github.com,如上面配置中的Host XX-Cao.github.com
3.配置了别名之后,新的地址就是git@XX.github.com:githubUserName/repName.git**(在添加远程仓库时使用)。这样 ssh 在连接时就可以区别不同的账号了文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

4.10.其他的操作与第五章节相同,当你第一次使用Git的clone或者push命令连接GitHub时,会得到警告:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?

这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

Warning: Permanently added 'github.com' (RSA) to the list of known hosts.

这个警告只会出现一次,后面的操作就不会有任何警告了。如果你实在担心有人冒充GitHub服务器,输入yes前可以对照GitHub的RSA Key的指纹信息是否与SSH连接给出的一致。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

5.Windows Linux 子系统

现代 windows 环境提供了 windows linux 子系统。 windows linux 子系统在传统的 windows 环境中提供了一个完整的 linux shell。如果 linux 子系统可用,则可以在 windows linux 子系统中执行之前针对 Linux 和 Mac 讨论的相同步骤。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

6.总结

SSH 密钥用于验证安全连接。按照本指南,您将能够创建并开始使用 SSH 密钥。在推送或拉取远程存储库时,Git 能够使用 SSH 密钥而不是传统的密码身份验证。像 Bitbucket 这样的现代托管 git 解决方案支持 SSH 密钥身份验证。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/42425.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/42425.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定