linux git ssh连接gitlab仓库_HTTP

Git通过 SSH 连接代码托管服务器github/gitee/内部私服 gitlab

一直以来,本地都是通过HTTPS协议直接 clone 代码,进行 pull/push 操作,今天尝试一下 #ssh# 方式,其实 ssh 不止能用来链接 github,也能用来连接服务器。

1、git 远程连接四种协议

咱们先了解一下 git四种协议

序号

协议

优点

缺点

1

本地协议

搭建简单,基于现有的文件权限和网络访问权限,适用于团队已经有共享文件系统。

$ git clone /opt/git/project.git

通常共享文件系统比较难配置,并且比起基本的网络连接访问,这不方便从多个位置访问。 如果你想从家里推送内容,必须先挂载一个远程磁盘,相比网络连接的访问方式,配置不方便,速度也慢。

2

HTTP/S协议

不同的访问方式只需要一个 URL 以及服务器只在需要授权时提示输入授权信息,这两个简便性让终端用户使用 Git 变得非常简单。 相比 SSH 协议,可以使用用户名/密码授权是一个很大的优势,这样用户就不必须在使用 Git 之前先在本地生成 SSH 密钥对再把公钥上传到服务器。 对非资深的使用者,或者系统上缺少 SSH 相关程序的使用者,HTTP 协议的可用性是主要的优势。 与 SSH 协议类似,HTTP 协议也非常快和高效。

另一个好处是 HTTP/S 协议被广泛使用,一般的企业防火墙都会允许这些端口的数据通过。

总结:一般开通443端口,通过账号密码连接,可用性比较高。

$ git clone https://example.com/gitproject.git

使用时总是频繁要输入密码,但是现代操作系统比较智能,可以帮助记录密码,如windows系统下凭证管理器、OSX 系统下 #Keychain#

3

SSH 协议

1.架设简单;2.数据传输时是安全的(所有数据传输时都经过授权和加密);3.高效,和其他3种协议一样,在传输数据时也会尽量压缩数据。

$ git clone ssh://user@server/project.git //使用ssh协议clone一个仓库

您可以使用 Secure Shell Protocol (SSH) 连接到 GitHub ,该协议通过不安全的网络提供安全通道。

不能通过它实现匿名访问。即使使用者只需要读取数据,使用者也要有通过SSH访问你主机的权限,不利于开源项目

4

git协议

目前是Git所使用的协议里面最快的。如果你的项目不需要为写进行用户授权,可以使用Git协议。

1.缺乏授权机制,一旦放开推送操作,意味着网络上的任何人都能向你的项目推送代码;2.架设难,需要特殊的端口9481,大型企业防火墙一般会封锁不参加端口

总结,目前常用的是 HTTP/S协议和 SSH 协议。

2、使用 SSH 协议

环境:Mac,终端是 iTerm,以 github为例

  1. 设置 本地 git 的 全局username和 useremail,此步骤非必须

检查是否已设置:git config --list,按 :q 推出

设置username/useremail

git config --global user.name 'yourname' 
git config --global user.email 'youremail'
  1. 生成Github SSH key

检查是否已经生成了,默认的文件名是 id_*。

cd ~/.ssh
ll

linux git ssh连接gitlab仓库_github_02

为了方便多帐号管理,我用其他具体的名字代替

ssh-keygen -t rsa -C '你的github邮箱'

如上图,我已经生成了 github 的 ssh key。

  1. 将 SSH 公钥复制到剪贴板
pbcopy < ~/.ssh/github.pub
  1. 上传 ssh pub

登录 github,依次点击,头像->Setting->SSH and GPG keys->new

linux git ssh连接gitlab仓库_github_03

将复制的 pub key粘贴进去,保存,输入 github 密码确认即可

linux git ssh连接gitlab仓库_github_04

linux git ssh连接gitlab仓库_git_05

  1. 测试

ssh -T git@github.com

linux git ssh连接gitlab仓库_经验分享_06

  1. 再用以下命令分别生成 gitee 和 gitcode的密钥

上传公钥的方式类似,不再赘述。

ssh-keygen -t rsa -f ~/.ssh/id_rsa_gitee -C "你的 gittee 邮箱"
ssh-keygen -t rsa -f ~/.ssh/id_rsa_gitcode -C "你的 gitcode邮箱"
  1. 增加文件config,文件内容
#gitee
Host gitee.com
HostName gitee.com
User 改成你的gitee邮箱
IdentityFile ~/.ssh/id_rsa_gitee

#gitcode
Host gitcode.net
HostName gitcode.net
User  改成你的 gitcode 邮箱
IdentityFile ~/.ssh/id_rsa_gitcode

我的~/.ssh目录如下:

linux git ssh连接gitlab仓库_github_07

整体测试一下

ssh -T git@github.com
ssh -T git@gitee.com
ssh -T git@gitcode.net

linux git ssh连接gitlab仓库_HTTP_08

3、操作仓库-命令行方式

以 fes.js 为例,克隆/下载,选择 ssh方式,并复制地址

linux git ssh连接gitlab仓库_HTTP_09

运行命令 git clone git@gitee.com:WeBank/fes.js.git完成 clone

push/pull 也一样。

4、利用可视化工具,如 Tower/SourceTree,也是很简单

linux git ssh连接gitlab仓库_github_10

linux git ssh连接gitlab仓库_git_11

5、常见问题

Q1:无法链接怎么办

A1:用命令 ssh -v git@gitee.com进行调试,找出问题。

linux git ssh连接gitlab仓库_git_12


Q2:如何删除 ssh host

A2:通过命令 ssh-keygen -R github.com


Q3:旧仓库用的 https 协议,需要重新 clone 嘛?

A3:不需要,修改 remote 仓库地址就行 git remote set-url origin <url>


标  题:Git通过 SSH 连接代码仓库
作  者:bugless