GitHub-微软-github.com
Gitee-开源中国- gitee.com
Gitlab-乌克兰GitLab 公司-gitlab.com
极狐(JihuLab)-中国代理商运营的Gitlab -gitlab.cn或者jihulab.com
使用SSH公钥可以让你在你的电脑和GitHub等平台通讯的时候使用更安全的连接(
Git的Remote
要使用
SSH地址
,例如
[email protected]:king/example.git
),但速度没有
HTTPS
(例如
https://gitee.com/king/example.git
)快。今天就来学习一下使用SSH公钥让电脑和GitHub等平台通讯的时候,
使用安全连接配置的详细过程
。
最新文章(2023-9-19 20:58:21)
:解决ssh:connect to host github.com port 22: Connection timed out与kex_exchange_identification
master分支与main分支的问题
使用git命令行方式提交项目到GitHub
一、生成SSH公钥和私钥
1.1 取消全局设置
如果曾经直接在TortoiseGit设置过或者使用过下面的指令设置过全局的 user.name 和 user.email。
$ git config --global user.name "你的名字"
$ git config --global user.email "你的邮箱"
可以使用下面的指令清除全局设置【推荐使用】
$ git config --global --unset user.name "你的名字"
$ git config --global --unset user.email "你的邮箱"
用 git config --global --list指令查看你是否清除全局设置成功:如果没有出现user和email,那就代表全局设置清除成功。
1.2 生成SSH公钥和私钥
ssh-keygen命令中指定私钥名称后,会同时生成是一对SSH公钥和私钥,带有.pub后缀的是公钥。
例如,gitee_id_rsa就是私钥,gitee_id_rsa.pub就是公钥。
1、私钥gitee_id_rsa位置在config文件中配置,由开发者手动ssh-keygen命令执行生成后,存放在本地机器~/.ssh 目录【C:\Users\用户名.ssh】目录中。私钥是用户的身份证,唯一识别用户,小心保管,不要泄露。
2、公钥gitee_id_rsa.pub配置到对应的代码托管平台(例如GitHub&Gitee&Gitlab&极狐(JihuLab)中。
3、提交代码时,通过校验对应的SSH公私钥,确认用户身份和提交的平台。
生成SSH公钥和私钥
【此处邮箱[email protected]不是默认,要修改成开发者个人配置的】
1、生成一个Gitee用的SSH-Key。
ssh-keygen -t rsa -C ‘[email protected]’ -f ~/.ssh/gitee_id_rsa
2、生成一个GitHub用的SSH-Key。
ssh-keygen -t rsa -C ‘[email protected]’ -f ~/.ssh/github_id_rsa
3、生成一个GitLab用的SSH-Key。
ssh-keygen -t rsa -C '[email protected]' -f ~/.ssh/gitlab_en_id_rsa
4、生成一个极狐(JihuLab)用的SSH-Key
ssh-keygen -t rsa -C '[email protected]' -f ~/.ssh/gitlab_id_rsa
注意输入生成SSH-key指令后,需要按回车3次,表示empty,即“空”,“空”代表没有密码。
ssh-keygen命令中的rsa是一种生成密钥的算法,也可以根据需求更换其他算法来生成 ssh key。
例如
ssh-keygen -t ed25519 -C "[email protected]" 这里使用的就是ed25519算法, 之后到对应平台重新添加公钥即可
1.3 生成GitLab的SSH公私钥的过程截图(其他平台把ssh-keygen命令更换即可)
**
注意
**:如果在此处设置了密码,则在
4.1 检测命令
中输入
ssh -t
命令 检测配置是否成功时,也需要输入此密码才能检测,所以此口令密码要记住,否则就完蛋了。
1.4 私钥gitee_id_rsa与公钥gitee_id_rsa.pub的内容
私钥gitee_id_rsa
公钥gitee_id_rsa.pub
1.5 GitHub&Gitee&Gitlab&极狐(JihuLab)最后生成的SSH公钥和私钥
同理,GitHub、Gitee、极狐(JihuLab)也是重复上述同样的过程,更换对应平台的ssh-keygen命令即可,此处不再赘述。
GitHub和Gitee对应过程,见我这篇文章中的:Git同时配置Gitee和GitHub两个不同的SSH-Key 。
二、 指定GitHub&Gitee&Gitlab&极狐的config私钥配置文件
**因为是同时配置
GitHub
&
Gitee
&
Gitlab
&
极狐(JihuLab)
的
SSH公私钥
,所以和只单独配置一个平台有所不同,为了
避免混淆不同平台的SSH公私钥
,需要在
~/.ssh
目录
【即C:\Users\用户名\.ssh目录】
下新建一个
config
文件,添加如下内容(其中
Host
和
HostName
填写
git服务器的域名
,
IdentityFile
指定
私钥的路径
)**
config
中配置时,如果没有指定端口,
默认使用22端口
,进行SSH连接,也
可以修改成443端口
,**#符号**是
注释
的意思,不起实际作用,
方便阅读理解
。
注意
:GitHub端口 443 的
主机名Hostname
为
ssh.github.com
,而不是
github.com
。
# github# ssh -T [email protected]
Port 443
Hostname ssh.github.com
Host github.com
Hostname ssh.github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa
此处
我的config文件
,参考时需要
根据个人机器实际配置情况
,进行
部分修改
,例如
私钥位置名称IdentityFile
。
# github
# ssh -T [email protected]
#Port443
#Hostname ssh.github.com
User git
#Port22 此处注释,默认也使用22端口
#Host github.com 2023-12-700:38:35 注释
Host github.com UpdateHostKeys yes
Hostname github.com
PreferredAuthentications publickey
IdentityFile~/.ssh/github_id_rsa
#2023-3-300:57:06
# gitee
#ssh-keygen -t rsa -C ‘[email protected]’ -f ~/.ssh/gitee_id_rsa
# ssh -T [email protected] gitee.com
Hostname gitee.com
PreferredAuthentications publickey
IdentityFile~/.ssh/gitee_id_rsa
#极狐第一种
#2023-4-522:37:31 jihulab
#ssh-keygen -t rsa -C '[email protected]' -f ~/.ssh/gitlab_id_rsa
#ssh -T [email protected] gitlab.cn
Hostname altssh.jihulab.com
User git
Port443PreferredAuthentications publickey
IdentityFile~/.ssh/gitlab_id_rsa
#极狐第二种
#2023-4-522:37:31 jihulab
#ssh-keygen -t rsa -C '[email protected]' -f ~/.ssh/gitlab_id_rsa
#ssh -T [email protected] jihulab.com
Hostname altssh.jihulab.com
User git
Port443PreferredAuthentications publickey
IdentityFile~/.ssh/gitlab_id_rsa
#2023-4-601:00:05
#ssh-keygen -t rsa -C '[email protected]' -f ~/.ssh/gitlab_en_id_rsa
#ssh -T [email protected]
#gitlab
Host gitlab.com
Hostname gitlab.com
#User git
#Port443PreferredAuthentications publickey
IdentityFile~/.ssh/gitlab_en_id_rsa
三、添加对应的公钥到GitHub&Gitee&Gitlab&极狐(JihuLab)。(添加时会让你输入密码认证)
GitHub和Gitee添加对应的公钥的过程,见我这篇文章:Git同时配置Gitee和GitHub两个不同的SSH-Key 二、生成SSH公钥-4、添加对应的公钥到Gitee和GitHub。(添加时会让你输入密码认证)
3.1 Gitee中配置公钥gitee_id_rsa.pub
//查看生成的Gitee公钥gitee_id_rsa.pub,复制Gitee公钥gitee_id_rsa.pub//或者直接去C:\Users\用户名\.ssh目录下直接用文本编辑器打开Gitee公钥gitee_id_rsa.pub,复制Gitee公钥gitee_id_rsa.pub的内容
cat ~/.ssh/gitee_id_rsa.pub
复制该Gitee公钥gitee_id_rsa.pub:
点击账号设置
添写标题和Gitee公钥gitee_id_rsa.pub内容后点击确定,后输入密码认证:
添加成功:
3.2 GitHub中配置公钥github_id_rsa.pub
//查看生成的GitHub公钥github_id_rsa.pub,复制GitHub公钥github_id_rsa.pub
cat ~/.ssh/github_id_rsa.pub
点击Settings
点击New SSH Key
输入标题&复制粘贴公钥github_id_rsa.pub的内容&点击Add SSH Key
3.3 Gitlab中配置公钥gitlab_en_id_rsa.pub
//查看生成的Gitlab公钥gitlab_en_id_rsa.pub,复制Gitlab公钥gitlab_en_id_rsa.pub
cat ~/.ssh/gitlab_en_id_rsa.pub
点击Preferences
点击SSH Keys
点击Add new key
填写 Gitlab公钥gitlab_en_id_rsa.pub相关信息后点击Add key:
3.4 极狐(JihuLab)中配置公钥gitlab_id_rsa.pub
//查看生成的极狐(JihuLab)公钥gitlab_id_rsa.pub,复制极狐(JihuLab)公钥gitlab_id_rsa.pub
cat ~/.ssh/gitlab_id_rsa.pub
点击偏好设置
点击SSH密钥
点击添加新密钥
填写密钥-标题-使用类型-到期时间等信息后-点击添加密钥
四、检测是否配置成功
4.1 检测命令
首次使用,会出现Are you sure you want to continue connecting(yes/no/[fingerprint] ?时 输入yes。【表示确认添加主机到可信任列表】
//检测GitHub
ssh -T [email protected]//检测gitee
ssh -T [email protected]//检测极狐(JihuLab)【中国代理商运营的Gitlab】
ssh -T [email protected]
或
ssh -T [email protected]//检测Gitlab
ssh -T [email protected]
4.2 检测命令执行成功截图
五、Git的SSH与HTTPS方式的命令行入门教程
注:SSH的
[email protected]:djcking/myapplication01.git
和HTTPS
https://gitee.com/djcking/myapplication01.git
直接从仓库中点击复制粘贴使用即可,
以哪种方式配置,就复制使用哪一种。
5.1 SSH(配合上面的教程使用)
Git全局设置
git config --global user.name "GiHub用户名"git config --global user.email "GitHub邮箱"
a:还没有git仓库,创建 git 仓库(此处以myapplication01仓库为例):
//1-创建myapplication01仓库
mkdir myapplication01
//2-进入myapplication01
cd myapplication01
//3-初始化仓库
git init
//3-创建README.md文件
touch README.md
//4-add README.md
gitadd README.md
//5-commit
git commit -m"first commit"
//6-绑定远端仓库
git remote add origin [email protected]:djcking/myapplication01.git
//7-首次推送到远端origin的master分支,带-u参数
git push -u origin "master" 或者 git push -u origin master
或者
git push -u origin main
【因为GitHub之前的默认分支一直就是master,但2020年10月后GitHub宣布:新建项目的默认分支将从
master逐步改为main。】
//后续再推送,不需要再带-u参数
git push origin "master" 或者 git push origin master
或者
git push origin main
【因为GitHub之前的默认分支一直就是master,但2020年10月后GitHub宣布:新建项目的默认分支将从
master逐步改为main。】
b:已有git仓库:
//1-进入已经存在的git仓库(此处以myapplication01仓库为例)
//cd existing_git_repo
cd myapplication01
//2-绑定远端仓库
git remote add origin [email protected]:djcking/myapplication01.git
3-首次推送到远端origin的master分支,带-u参数
git push -u origin "master" 或者 git push -u origin master
或者
git push -u origin main
【因为GitHub之前的默认分支一直就是master,但2020年10月后GitHub宣布:新建项目的默认分支将从
master逐步改为main。】
//后续再推送,不需要再带-u参数
git push origin "master" 或者 git push origin master
或者
git push origin main
【因为GitHub之前的默认分支一直就是master,但2020年10月后GitHub宣布:新建项目的默认分支将从
master逐步改为main。】
更简单的使用方式
:直接
建远端仓库后
,
clone到本地
,
无需
初始化(git init)和绑定仓库(git remote add origin),可以直接使用。
5.2 HTTPS(需以HTTPS方式配置使用Git)
Git全局设置
git config --global user.name "GiHub用户名"git config --global user.email "GitHub邮箱"
a:还没有git仓库,创建 git 仓库(此处以myapplication01仓库为例):
//1-创建myapplication01仓库
mkdir myapplication01
//2-进入myapplication01
cd myapplication01
//3-初始化仓库
git init
//3-创建README.md文件
touch README.md
//4-add README.md
gitadd README.md
//5-commit
git commit -m"first commit"
//6-绑定远端仓库
git remote add origin https://gitee.com/djcking/myapplication01.git
//7-首次推送到远端origin的master分支,带-u参数
git push -u origin "master" 或者 git push -u origin master
或者
git push -u origin main
【因为GitHub之前的默认分支一直就是master,但2020年10月后GitHub宣布:新建项目的默认分支将从
master逐步改为main。】
//后续再推送,不需要再带-u参数
git push origin "master" 或者 git push origin master
或者
git push origin main
【因为GitHub之前的默认分支一直就是master,但2020年10月后GitHub宣布:新建项目的默认分支将从
master逐步改为main。】
b:已有git仓库:
//1-进入已经存在的git仓库(此处以myapplication01仓库为例)
//cd existing_git_repo
cd myapplication01
//2-绑定远端仓库
git remote add origin https://gitee.com/djcking/myapplication01.git
//3-首次推送到远端origin的master分支,带-u参数
git push -u origin "master" 或者 git push -u origin master
或者
git push -u origin main
【因为GitHub之前的默认分支一直就是master,但2020年10月后GitHub宣布:新建项目的默认分支将从
master逐步改为main。】
//后续再推送,不需要再带-u参数
git push origin "master" 或者 git push origin master
或者
git push origin main
【因为GitHub之前的默认分支一直就是master,但2020年10月后GitHub宣布:新建项目的默认分支将从
master逐步改为main。】
更简单的使用方式
:直接
建远端仓库后
,
clone到本地
,
无需
初始化(git init)和绑定仓库(git remote add origin),可以直接使用。
六、Git命令行方式增加文件README.md(SSH)
未推送README.md的Gitee仓库MyApplication
往Gitee仓库MyApplication
推送
README.md后
的的命令截图
推送README.md后
的
Gitee仓库MyApplication
6.1 创建README.md前
6.2 touch README.md
6.3 git add README.md
gitadd 命令可将该文件的修改添加到暂存区。
通过运行 gitadd 命令,你可以告诉 Git 哪些文件的修改应该包含在下一次提交(commit)中。
将文件从workdir(工作目录)中添加到缓存区index(即暂存区stage)(出现红色感叹号)
//*表示所有文件
gitadd *
//.表示当前目录下的所有文件
gitadd.
//也可以直接添加目录
gitadd 目录名
//添加一个或多个文件
gitadd 文件1名 文件2名
//强制提交某个文件(不管.gitignore是否包含了这个文件)
//.gitignore文件是用来配置 忽略不需要上传的文件 的文件
gitadd-f 文件名
6.4 git commit -m “add README.md”
git commit - m
“
代码提交信息
”
代码提交信息
相当于
代码中的注释
。
执行完,会
根据摘要算法(SHA1)生成一个不重复的40位提交ID字符串
,默认只会
显示7位
,
唯一识别你的每一次提交
,这里是
731adec
。
6.5 git push -u origin “master” 首次推送带-u参数
这里
之前第一次初始化仓库时,第6步,已经绑定过仓库
,所以这里
无需再绑定
,无需再执行
git remote add origin [email protected]:djcking/myapplication01.git
,
直接push到远端仓库
。
注意
:
1、这里的
-u 参数
,一般在
第一次 push
的时候使用,相当于建立
某个本地分支(这里是master分支)
与
对应的远端分支(orgin/master)
的第一次联系。后面
再push这个本地分支
到远端仓库,就
无需再加-u参数
,直接执行
git push origin master
。
2、如果这个分支,是git pull下来的,修改后再push,也无需再加-u参数,直接执行
git push -u origin master
,因为之前
已经建立过
这个本地分支与对应的远端分支之间的
第一次联系
,
pull到本地workspace
,联系也会存在,后面
再push这个本地分支
到远端仓库,就
无需再加-u参数
,直接执行
git push origin master
。
git push -u origin main
的
情况同理
。
3、(来自《GitHub入门与实践》中的一些说明)
//首次推送到远端origin的master分支,带-u参数
git push -u origin "master" 或者 git push -u origin master
或者
git push -u origin main
【因为GitHub之前的默认分支一直就是master,但2020年10月后GitHub宣布:新建项目的默认分支将从
master逐步改为main。】
//后续再推送,不需要再带-u参数
git push origin "master" 或者 git push origin master
或者
git push origin main
【因为GitHub之前的默认分支一直就是master,但2020年10月后GitHub宣布:新建项目的默认分支将从
master逐步改为main。】
推送README.md后
的
Gitee仓库MyApplication
本地仓库master
与
远端仓库origin\master
命令行
下查看:
//查看本地分支
git branch
//查看所有分支(包含本地和远端)git branch -a
图形化IDE
下查看:
七、附自己写的其他相关博客
使用git命令行方式提交项目到GitHub
master分支与main分支的问题
5步将 GitHub 默认分支从 Master 更改为 Main(转载)
参考
:
测试 SSH 连接
在 HTTPS 端口使用 SSH
版权归原作者 Kudō Shin-ichi 所有, 如有侵权,请联系我们删除。