git学习4-远程仓库

最早,肯定只有一台机器有一个原始版本库,此后,别的机器可以“克隆”这个原始版本库,而且每台机器的版本库其实都是一样的,并没有主次之分。其实一台电脑上也是可以克隆多个版本库的,只要不在同一个目录下。不过,现实生活中是不会有人这么傻的在一台电脑上搞几个远程库玩,因为一台电脑上搞几个远程库完全没有意义,而且硬盘挂了会导致所有库都挂掉。

实际情况往往是这样,找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。

完全可以自己搭建一台运行Git的服务器,不过现阶段,为了学Git先搭个服务器绝对是小题大作。好在这个世界上有GitHubATLASSIAN Bitbucket...,从名字就可以看出,就是提供Git仓库托管服务的,所以,只要注册一个GitHub、Bitbucket账号,就可以免费获得Git远程仓库。个人体会国内Bitbucket更快;Github目前不支持中文(中文文档)。

自行在线注册git账号不在话下。

很多朋友在用github管理项目的时候,都是直接使用https url克隆到本地,当然也有有些人使用 SSH url 克隆到本地。然而,为什么绝大多数人会使用https url克隆呢?

这是因为,使用https url克隆对初学者来说会比较方便,复制https url 然后到 git Bash 里面直接用clone命令克隆到本地就好了。而使用 SSH url 克隆却需要在克隆之前先配置和添加好 SSH key 。而且如果你想要使用 SSH url 克隆的话,你必须是这个项目的拥有者。否则你是无法添加 SSH key 的

https 和 SSH 的区别:

1、前者可以随意克隆github上的项目,而不管是谁的;而后者则是你必须是你要克隆的项目的拥有者或管理员,且需要先添加 SSH key ,否则无法克隆。

2、https url 在push的时候是需要验证用户名和密码的;而 SSH 在push的时候,是不需要输入用户名的,如果配置SSH key的时候设置了密码,则需要输入密码,否则是不需要输入密码。

SSH加密

第1步 本地终端生成密钥(私钥、公钥)

创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key。ssh-keygen -t rsa -C 'caryss@aliyun.com'你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对。

  • id_rsa是私钥,不能泄露出去。

  • id_rsa.pub是公钥,可以放心地告诉任何人。

  • 友情提示:例子中的涉密信息都处理过了。

据说命令$ ssh-keygen # 无需参数也可以,这里不研究了。

代码参数含义:
-t 指定密钥类型,默认是 rsa,可以省略。
-C 设置注释文字,比如邮箱。生成的公钥里有带有这个邮箱,但不影响将其同时提供给GitHub、Bitbucket。
-f 指定密钥文件存储文件名。

$ cd
~$ ls -a
.   .bash_history  .bashrc  .gitbook    .motd_shown  .profile         .sudo_as_admin_successful  .viminfo
..  .bash_logout   .config  .landscape  .npm         .python_history  .vim
~$ ssh-keygen -t rsa -C 'caryss@aliyun.com'
Generating public/private rsa key pair.
Enter file in which to save the key (/home/cary/.ssh/id_rsa):
Created directory '/home/cary/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/cary/.ssh/id_rsa
Your public key has been saved in /home/cary/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:IcOuJIb971hzBDy24G5BcnvbnqYz5P0sc9TrGKFDBig carys@aliyun.com
The key's randomart image is:
+---[RSA 3072]----+
|                 |
|     +           |
|  E = X .        |
| o * = B .       |
|. + = + S ..     |
| . = +.* ....    |
|    =o+.=..  .   |
|   . +++=+.o.    |
|    ..+=o=+..    |
+----[SHA256]-----+
~$ ls .ssh
id_rsa  id_rsa.pub
~$ cat .ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----
~$ cat .ssh/id_rsa.pub
ssh-rsa 
AAAAB3NzaC1yc2EAAAADAQABAAABgQCtWPv0wrSNB6EZ34KliW6Xx1JAJ4n1PV2VG/mawsrP2I0NftkGx3osVeaPUva4TdnjshdsCYK0K4NS
h3nJC2fgBSZNiTFAkuQHl85ciU534N6xp+JQHhRlThDazWJOrKrd86G6//hTenYrYIHHUezZqBx3fa1XgkfX28UfYczdt+3oWsmoGAW2NCNW
iuev+NX4qBm+dxSLuAbOyYBdMOvHgnvWXadJAp5bMaBEPRLBnbZlZ/8GMTz4xA7V54CqJ8L2ODv5e2T8qhVaH3C4q+napN+HXhqmqAZ8fChK
iTclO5Z/4At889GEF+OyYvanN0Tql55lVTK9zcplJC/8p7aBRI2zEsnvF8jYVEFFZYKVojvN5olUAzskGVbh1dvDdK+vdVCTMIvXj2apUA1h
U= caryss@aliyun.com
~$

passphrase n. 密码
randomart n. 随机艺术

第2步 远程Git服务上添加公钥

廖老师:
登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。

为什么Bitbucket需要SSH Key呢?因为Bitbucket需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,Bitbucket只要知道了你的公钥,就可以确认只有你自己才能推送。

  • 当然,Bitbucket允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到Bitbucket,就可以在每台电脑上往Bitbucket推送了。

  • 一个电脑系统的公钥也可以同时提供给不同的Git服务平台,这是允许的。

  • 友情提示:在GitHub / Bitbucket上免费托管的Git仓库,任何人都可以看到喔(但只有你自己才能改)。所以,不要把敏感信息放进去。

  • Bitbucket、GitHub上都可以设置 private repository。

廖老师:
如果你不想让别人看到Git库,有两个办法,一个是交点保护费,让Bitbucket把公开的仓库变成私有的,这样别人就看不见了(不可读更不可写)。
另一个办法是自己动手,搭一个Git服务器,因为是你自己的Git服务器,所以别人也是看不见的。这个方法我们后面会讲到的,相当简单,公司内部开发必备。

SSH Key访问测试

SSH警告

当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:

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

这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。

Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:

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

这个警告只会出现一次,后面的操作就不会有任何警告了。

如果你实在担心有人冒充GitHub服务器,输入yes前可以对照GitHub的RSA Key的指纹信息中文-GitHub 的 SSH 密钥指纹 - GitHub Docs)是否与SSH连接给出的一致。

比对SSH密钥指纹
比对SSH密钥指纹

这样可以认为github端给出了他的fingerprint,表明github身份真实。

初次登录Are you sure you want to continue connecting (yes/no/[fingerprint])?直接回车即可。

实操 Github:

~$ ssh git@github.com
The authenticity of host 'github.com (52.74.223.119)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com,52.74.223.119' (RSA) to the list of known hosts.
PTY allocation request failed on channel 0
Hi caryqd! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
~$ ssh git@github.com
PTY allocation request failed on channel 0
Hi caryqd! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
~$ ssh -T git@github.com
Hi caryqd! You've successfully authenticated, but GitHub does not provide shell access.
~$

实操 Bitbucket:

~$ ssh git@bitbucket.org
Connection closed by 104.192.141.1 port 22
~$ git --version
git version 2.25.1
~$ ssh git@bitbucket.org
The authenticity of host 'bitbucket.org (104.192.141.1)' can't be established.
RSA key fingerprint is SHA256:zzXQOXSRBEiUtuE8AikJYKwbHaxvSc0ojez9YXaGp1A.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'bitbucket.org,104.192.141.1' (RSA) to the list of known hosts.
PTY allocation request failed on channel 0
logged in as carysunqd

You can use git to connect to Bitbucket. Shell access is disabled
Connection to bitbucket.org closed.
~$ ssh -T git@bitbucket.org
logged in as carysunqd

You can use git to connect to Bitbucket. Shell access is disabled
~$

ssh -T Disable pseudo-terminal allocation 禁用伪终端分配

posted on 2021-04-16 15:21  carysun  阅读(713)  评论(0编辑  收藏  举报