Git通过 SSH 连接代码托管服务器github/gitee/内部私服 gitlab
一直以来,本地都是通过HTTPS协议直接 clone 代码,进行 pull/push 操作,今天尝试一下 #ssh# 方式,其实 ssh 不止能用来链接 github,也能用来连接服务器。
1、git 远程连接四种协议
咱们先了解一下 git四种协议
序号 | 协议 | 优点 | 缺点 |
1 | 本地协议 | 搭建简单,基于现有的文件权限和网络访问权限,适用于团队已经有共享文件系统。
| 通常共享文件系统比较难配置,并且比起基本的网络连接访问,这不方便从多个位置访问。 如果你想从家里推送内容,必须先挂载一个远程磁盘,相比网络连接的访问方式,配置不方便,速度也慢。 |
2 | HTTP/S协议 | 不同的访问方式只需要一个 URL 以及服务器只在需要授权时提示输入授权信息,这两个简便性让终端用户使用 Git 变得非常简单。 相比 SSH 协议,可以使用用户名/密码授权是一个很大的优势,这样用户就不必须在使用 Git 之前先在本地生成 SSH 密钥对再把公钥上传到服务器。 对非资深的使用者,或者系统上缺少 SSH 相关程序的使用者,HTTP 协议的可用性是主要的优势。 与 SSH 协议类似,HTTP 协议也非常快和高效。 另一个好处是 HTTP/S 协议被广泛使用,一般的企业防火墙都会允许这些端口的数据通过。 总结:一般开通443端口,通过账号密码连接,可用性比较高。
| 使用时总是频繁要输入密码,但是现代操作系统比较智能,可以帮助记录密码,如windows系统下凭证管理器、OSX 系统下 #Keychain# |
3 | SSH 协议 | 1.架设简单;2.数据传输时是安全的(所有数据传输时都经过授权和加密);3.高效,和其他3种协议一样,在传输数据时也会尽量压缩数据。
您可以使用 Secure Shell Protocol (SSH) 连接到 GitHub ,该协议通过不安全的网络提供安全通道。 | 不能通过它实现匿名访问。即使使用者只需要读取数据,使用者也要有通过SSH访问你主机的权限,不利于开源项目 |
4 | git协议 | 目前是Git所使用的协议里面最快的。如果你的项目不需要为写进行用户授权,可以使用Git协议。 | 1.缺乏授权机制,一旦放开推送操作,意味着网络上的任何人都能向你的项目推送代码;2.架设难,需要特殊的端口9481,大型企业防火墙一般会封锁不参加端口 |
总结,目前常用的是 HTTP/S协议和 SSH 协议。
2、使用 SSH 协议
环境:Mac,终端是 iTerm,以 github为例
- 设置 本地 git 的 全局username和 useremail,此步骤非必须
检查是否已设置:git config --list
,按 :q 推出
设置username/useremail
git config --global user.name 'yourname'
git config --global user.email 'youremail'
- 生成Github SSH key
检查是否已经生成了,默认的文件名是 id_*。
cd ~/.ssh
ll
为了方便多帐号管理,我用其他具体的名字代替
ssh-keygen -t rsa -C '你的github邮箱'
如上图,我已经生成了 github 的 ssh key。
- 将 SSH 公钥复制到剪贴板
pbcopy < ~/.ssh/github.pub
- 上传 ssh pub
登录 github,依次点击,头像->Setting->SSH and GPG keys->new
将复制的 pub key粘贴进去,保存,输入 github 密码确认即可
- 测试
ssh -T git@github.com
- 再用以下命令分别生成 gitee 和 gitcode的密钥
上传公钥的方式类似,不再赘述。
ssh-keygen -t rsa -f ~/.ssh/id_rsa_gitee -C "你的 gittee 邮箱"
ssh-keygen -t rsa -f ~/.ssh/id_rsa_gitcode -C "你的 gitcode邮箱"
- 增加文件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目录如下:
整体测试一下
ssh -T git@github.com
ssh -T git@gitee.com
ssh -T git@gitcode.net
3、操作仓库-命令行方式
以 fes.js 为例,克隆/下载,选择 ssh方式,并复制地址
运行命令 git clone git@gitee.com:WeBank/fes.js.git
完成 clone
push/pull 也一样。
4、利用可视化工具,如 Tower/SourceTree,也是很简单
5、常见问题
Q1:无法链接怎么办
A1:用命令 ssh -v git@gitee.com
进行调试,找出问题。
Q2:如何删除 ssh host
A2:通过命令 ssh-keygen -R github.com
Q3:旧仓库用的 https 协议,需要重新 clone 嘛?
A3:不需要,修改 remote 仓库地址就行 git remote set-url origin <url>
标 题:Git通过 SSH 连接代码仓库
作 者:bugless