返回顶部

Git管理远程仓库的另一种方式——SSH

Git管理远程仓库的另一种方式——SSH

工作中更常用的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 主要步骤:

  1. 创建密钥对
  2. 在 Git 服务端-【个人设置】-【SSH 公钥】添加刚生成的公钥文件
  3. 在本地配置 ssh

一、生成密钥对

  1. ~/.ssh/路径下,使用 ssh-keygen 命令生成密钥对:
cd ~/.ssh/
ssh-keygen -t rsa -C {邮箱地址} -f {密钥对名称}

例如:

cd ~/.ssh/
ssh-keygen -t rsa -C zhangsan@qq.com -f coding_rsa
  1. 提示设置密钥的密码和确认密码
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

这里设置的密码是每次使用这个密钥的时候,将提示输入的密码,不设置直接回车

接着在命令行当前所在文件夹将创建 coding_rsacoding_rsa.pub2 个文件。

coding_rsa.pub // 公钥
coding_rsa // 私钥

小技巧:除了从.pub 后缀可以看出是公钥文件外,还可以查看文件内容,ssh-rsa开头的是公钥文件。

二、本地配置一个 ssh key

当我们只有一个 Git 远程账号的时候,例如只有 github 的账号。

  1. 在【个人设置】-【SSH 公钥】添加好刚才创建的公钥文件。

图片描述

  1. 将私钥文件添加到 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 协议管理则不用一一修改。

本文标题: 《Git管理远程仓库的另一种方式——SSH》

文章链接: https://www.lizhijun.com.cn/index/index/post/id/ZEOZZJYUPok%253D.html

文章作者: 荔枝君

发布时间: 2019-10-08

最后更新: 2024-12-09

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

请荔枝君喝杯咖啡☕️:-)
打赏