Git克隆远程仓库的方式
使用Git从gitee或者github上克隆仓库一般有两种方式。
一种是使用https协议:
git clone https://gitee.com/id/仓库名.git
或者
git clone https://用户名@gitee.com/id/仓库名.git(这种方式指定克隆的用户
,验证时只输入密码即可)
一种是使用ssh协议:
git clone git@gitee.com:id/仓库名.git
HTTPS原理
https可以看做是http+ssl,ssl协议位于网络应用层和传输层之间,只要用于为应用层提供加密服务。在https中即使用ssl协议为http提供加密传输服务。
https操作远程仓库只需要用到username和pwd即可。分两步进行,用户实际只需用操作第一步,第二步对用户是透明的。
- 使用username和pwd验证对远程repo的操作权限;
- 2.ssl对传输数据进行加密。
HTTPS操作远程repo的常用配置
因只需要本地用户提供username和pwd验证操作权限,因此只要配置好自己的username和pwd即可。
如果本地没有永久保存对远程仓库的账号和密码,那么每次对远程仓库进行操作时,server都会要求用户输入账号和密码。
Windows和一些第三方Git client(像TortoiseGit)支持永久保存git账户密码。
Windows查看保存的账号信息:
Win键 ->搜索credential ->管理Windows 凭据 -> 普通凭据(or 控制面板 -> 用户账户 -> 管理Windows 凭据 -> 普通凭据)
git 命令行永久保存账号密码:
git config --global credential.helper store#设置保存凭证
git config --global user.name "用户名"
git config --global user.email "邮箱"
git config --global user.password "密码"
这样就可以永久保存了,避免重复输入带来的繁琐。
HTTPS操作远程repo的常见错误
server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
要知道ssl协议需要验证目标网站的CA证书,如果客户端任务目标网站的CA证书不可信,就会报这个错误。
使用https访问gitee或者github网站不应该出现这个问题,因为这两个网站发布的CA证书肯定是申请了可信的证书的。
出现这个问题一般是在公司内网访问时,因为公司内网安全策略导致的。解决办法就是将目标网站涉及的根证书加入到系统的可信列表即可。
从浏览器提取到gitee的根证书文件,供下一步使用;
有两种方式可以导入CA证书。
方式一:将将crt证书文件放到目录:/usr/local/share/ca-certificates
加入后执行update-ca-certificates 即可导入成功。
方法二:修改配置文件:/etc/ca-certificates.conf,将下载的CA证书路径加入该配置文件。
加入后执行update-ca-certificates 即可导入成功。
SSH原理
SSH是Secure Shell的缩写,即安全外壳协议,是建立在应用层基础上的安全协议,专为远程登录会话和其他网络服务提供安全加密的协议。
ssh使用非对称加密所需的key-pairs完成身份验证和数据加密。ssh client和server分别需要持有非对称秘钥中的一个。
出于安全考虑,通常由用户使用密钥生成工具生成RSA密钥对,并将public key添加到服务端,客户端自己保留private key。client使用private key向服务端证明自己的身份。
注意ssh秘钥只对ssh协议有效,如果你是使用https协议克隆仓库到本地的,即使在码云上添加了ssh公钥,你在本地执行push、pull等操作时,还是会要求你输入码云的用户名和密码。
那本地怎么创建ssh的公钥和私钥呢?使用ssh-keygen命令。
ssh-keygen -t ed25519 -C "秘钥名称"
保存路径默认即可,回车。
下一步会让你输入密码,注意:这并不是码云的登录密码,而是ssh在使用该秘钥时要求输入的密码,可以防止误操作,如果你在这一步设置了密码,那么后面在使用git push,pull等操作时会要求你输入该密码,这就是有些人问为什么明明添加了ssh key密钥,每次push或pull时还要输入密码的原因了。这里我们不设置,直接两次回车!
这样就生成了ssh的公钥和私钥,将pub后缀的公钥复制到gitee或者github上。后面就不需要每次都要输入密码和用户名了,可以愉快的玩耍了。
需要注意的是,ssh client会默认使用~/.ssh/id_rsa,如果你生成的秘钥不在默认路径,需要位ssh client指定。
SSH和HTTPS比较
https协议端口一般使用80和443,防火墙一般会打开这两个端口,用户可以直接使用。可以实现匿名访问。
ssh需要安装ssh client ,需要生成RSA密钥对,配置稍微繁琐点。
总的来说,HTTPS方便快捷,适合于开源项目,SSH适合内部项目。