git中https和SSH的clone方式详细介绍 以及多个github账号的SSH冲突解决 以及SSH端口被防火墙屏蔽问题解决 通过HTTPS克隆私有项目问题

学习目标:

掌握Git的知识


学习内容:

1.HTTPS和SSH方式的区别 2.完整配置SSH秘钥和公钥的步骤 3.多个github账号的SSH冲突解决 4.SSH端口被防火墙屏蔽问题解决 5.通过HTTPS或者SSH克隆私有项目

学习时间:

2022.2.10

学习产出:

1.HTTPS和SSH方式的区别

在git中clone项目有两种方式:HTTPS和SSH,它们的区别如下:

HTTPS:不管是谁,拿到url随便clone,但是在push的时候需要验证用户名和密码;
SSH:clone的项目你必须是拥有者或者管理员,而且需要在clone前添加SSH Key。
SSH 在push的时候,是不需要输入用户名的,如果配置SSH key的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。

在git中使用SSH Key的步骤: 检查电脑是否存在SSH Key:$ cd ~/.ssh$ ls 如果存在id_rsa.pub 或
id_dsa.pub 文件,说明文件以及存在,跳过创建SSH Key步骤。 创建SSH Key 将公共的SSH 放到远程仓库上

2.完整配置SSH秘钥和公钥的步骤

请看我该专栏的另外一篇文章

3.多个github账号的SSH冲突解决

github使用SSH与客户端连接。如果是单用户(first),生成密钥对后,将公钥保存至github,
每次连接时SSH客户端发送本地私钥(默认~/.ssh/id_rsa)到服务端验证。
单用户情况下,连接的服务器上保存的公钥和发送的私钥自然是配对的。

但是如果是多用户(first,second),我们在连接到second的帐号时,
second保存的是自己的公钥,但是SSH客户端依然发送默认私钥,即first的私钥, 那么这个验证自然无法通过。
不过,要实现多帐号下的SSH key切换在客户端做一些配置即可。

首先cd到~/.ssh 使用 ssh-keygen -t -rsa -C ‘[email protected]’ 生成新的SSH key:id_rsa_second,生成完后将新的SSH public key添加到github。

ssh-keygen -t -rsa -C '[email protected]'

默认SSH只会读取id_rsa,所以为了让SSH识别新的私钥,需要将其添加到SSH agent

ssh-add/.ssh/id_rsa_second

该命令如果报错:Could not open a connection to your authentication agent. 无法连接到ssh agent,可执行ssh-agent bash命令后再执行ssh-add命令。

完成以上步骤后在~/.ssh目录创建config文件,该文件用于配置私钥对应的服务器。内容如下:

 Default github user(first@mail.com)
Host github.com
HostName github.com
User git
IdentityFile C:/Users/username/.ssh/id_rsa

#second user([email protected])
Host github-second
HostName github.com
User git
IdentityFile C:/Users/username/.ssh/id_rsa_second

配置完成后,在连接非默认帐号的github仓库时,远程库的地址要对应地做一些修改, 比如现在添加second帐号下的一个仓库test,则需要这样添加:

git remote add test git@github-second:second/test.git 
#并非原来的[email protected]:second/test.git

这样每次连接都会使用id_rsa_second与服务器进行连接。至此,大功告成!

注意: github根据配置文件的user.email来获取github帐号显示author信息, 所以对于多帐号用户一定要记得将user.email改为相应的email([email protected])。

4.SSH端口被防火墙屏蔽问题解决

设置SSH使用HTTPS的403端口
在局域网中SSH的22端口可能会被防火墙屏蔽,可以设置SSH使用HTTPS的403端口。

测试HTTPS端口是否可用

$ ssh -T -p 443 git@ssh.github.com
Hi username! You've successfully authenticated, but GitHub does not
provide shell access.

编辑SSH配置文件 ~/.ssh/config 如下:

Host github.com
Hostname ssh.github.com
Port 443

测试是否配置成功

$ ssh -T git@github.com
Hi username! You've successfully authenticated, but GitHub does not
provide shell access.

5.通过HTTPS或者SSH克隆私有项目

目前来说,github的私人项目已经可以免费使用了一段时间,但是当你用普通的clone方式去下载到本地的时候,会发现提示clone失败,报错显示

remote: Repository not found.
fatal: repository ‘https://github.com/github-username/github-template-name.git’ not found

正常来说,clone的链接格式一般是

https://github.com/github-username/github-template-name.git

那么当你想要在本地clone自己的私人项目的时候,为了私人项目的安全,就需要加上账号与密码进行验证

git clone https://github-username:github-password@github.com/github-username/github-template-name.git

在clone的时候,在https://后面先加上github-username:github-password,再@项目的链接就可以正常的把项目clone下来,这是相对比较简单的clone自己的私人项目的方法。

有些图形化的Git软件,可以提示你输入账户和密码,这样就比较方便。比如说
在这里插入图片描述
输入私有仓库的HTTPS的链接,点击克隆,它会自动弹出输入框,让你输入账号密码,这比较人性化

但是,SourceTree这个软件
在这里插入图片描述
输入HTTPS的链接,无法克隆。因为这是私有仓库
解决办法就是在SourceTree登录远程账户
git中https和SSH的clone方式详细介绍 以及多个github账号的SSH冲突解决 以及SSH端口被防火墙屏蔽问题解决 通过HTTPS克隆私有项目问题_第1张图片
便可拉取私有仓库

或者,使用SSH链接的方式也可以达到需求。因为SSH通过秘钥和公钥进行匹配,不需要输入账户和密码

你可能感兴趣的:(Git使用,ssh,git,github)