工作中更常用的Git远程仓库管理SSH协议
很多 Git 入门学习的文章介绍管理远程 Git 仓库时,介绍的都是使用 https 协议 clone 和 push 代码。在使用 push 时,需要输入 Git 账号和密码,提交自己代码到远程 git 仓库中。 简单使用 Git,https 协议就已经足够满足我们对 Git 的基本使用了,在一些多项目,多人协同的时候,我们也会选择使用 SSH 协议来管理。
对比两种协议
HTTPS 协议:
- 优点:使用 HTTPS 协议的用户名/密码的基础授权,免去设置 SSH 公钥。
- 缺点:在推送代码的时候每次都需要输入用户名/密码授权,然而,你可以选择使用凭证存储工具来保存密码,比如 OSX 的 Keychain 或者 Windows 的凭证管理器。
SSH 协议:
- 优点:通过 SSH 访问是安全的,所有传输数据都要经过授权和加密。 如果服务端变更了 https 协议,使用 ssh 管理的 Git 仓库可以不用一一修改地址。
- 缺点:不能实现匿名访问。 即便只要读取数据,使用者也要有通过 SSH 访问你的主机的权限,这使得 SSH 协议不利于开源的项目。
SSH 协议之于 Git 的原理
SSH 是基于 RSA 密钥对的方式来传输数据的,所以首先用 SSH 命令生成一个公钥-私钥对,我们会把公钥添加到 Git 的服务器,把私钥放在本地。 提交文件的时候 Git 服务器会用公钥和客户端提交私钥做验证,如果验证通过则提交成功。在 Git 服务器上配置公钥,这个过程可以理解为帐号和密码托管给 SSH 了,所以在提交代码时,将不再验证我们的账号密码了。
使用 SSH 协议管理 Git 主要步骤:
- 创建密钥对
- 在 Git 服务端-【个人设置】-【SSH 公钥】添加刚生成的公钥文件
- 在本地配置 ssh
一、生成密钥对
- 在
~/.ssh/
路径下,使用 ssh-keygen 命令生成密钥对:
cd ~/.ssh/
ssh-keygen -t rsa -C {邮箱地址} -f {密钥对名称}
例如:
cd ~/.ssh/
ssh-keygen -t rsa -C zhangsan@qq.com -f coding_rsa
- 提示设置密钥的密码和确认密码
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
这里设置的密码是每次使用这个密钥的时候,将提示输入的密码,不设置直接回车
接着在命令行当前所在文件夹将创建 coding_rsa
和coding_rsa.pub
2 个文件。
coding_rsa.pub // 公钥
coding_rsa // 私钥
小技巧:除了从.pub
后缀可以看出是公钥文件外,还可以查看文件内容,ssh-rsa
开头的是公钥文件。
二、本地配置一个 ssh key
当我们只有一个 Git 远程账号的时候,例如只有 github 的账号。
- 在【个人设置】-【SSH 公钥】添加好刚才创建的公钥文件。
- 将私钥文件添加到 ssh 配置中:
ssh-add ~/.ssh/coding_rsa
此时,ssh 协议已经配置成功!
小技巧:
- ssh-agent 中的公钥
ssh-add -L
- 查看 ssh-agent 中的密钥
ssh-add -l
- 删除已添加指定路径的公钥
ssh-add -d {公钥路径}
三、本地配置多个 ssh key
当我们有多个 Git 远程账号时,例如同时有 github,或者 coding.net 的账号时。
我们可以根据不同 host 创建对应的密钥对,例如:
# 创建coding的密钥对:
ssh-keygen -t rsa -C "lizhijun@shanhekeji.com" -f coding_rsa
# 创建github的密钥对:
ssh-keygen -t rsa -C "lizhijun@shanhekeji.com" -f github_rsa
在 coding 和 github 平台添加对应的公钥
接着在~/.ssh/
新建一个名为 config 的文件,用它来配置多个 SSH 的管理
vi ~/.ssh/config
按以下格式添加相关配置:
# coding
Host e.coding.net
HostName e.coding.net
User lizhijun@shanhekeji.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/coding_rsa
# github
Host github.com
HostName github.com
User lizhijun@shanhekeji.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_rsa
# 配置文件参数
# Host : Host可以看作是一个你要识别的模式,对识别的模式,进行配置对应的的主机名和ssh文件
# HostName : 要登录主机的主机名
# User : 登录名
# PreferredAuthentications : publickey
# IdentityFile : 指明上面User对应的identityFile路径
这样 ssh 就配置好了,并不需要使用 ssh-add 来添加密钥了。
测试 SSH 协议
测试 ssh 密钥对配置是否成功:
ssh -T git@{git仓库域名}
如果你是 Github:
ssh -T git@github.com
如果你是 Github:
ssh -T git@gitlib.com
例如:
~ ssh -T git@e.coding.net
Coding 提示: Hello 荔枝君, You've connected to Coding.net via SSH. This is a personal key.
荔枝君,你好,你已经通过 SSH 协议认证 Coding.net 服务,这是一个个人公钥
总结
使用 SSH 协议管理 Git 一般来说更安全,更方便,假如 Git 仓库用 https 协议,万一切换到 http 协议,那么对应的仓库地址都要修改,用 SSH 协议管理则不用一一修改。