Jamey's Jamey's
首页
导航站
  • 学习专栏

    • 《HTML》笔记
    • 《CSS》笔记
    • 《JavaScript》笔记
    • 《Vue》笔记
    • 《Git》笔记
    • 《规范》笔记
    • 《软技能》笔记
    • 《面试》笔记
    • 《持续集成&交付&部署》笔记
  • 踩坑专栏

    • 《Element-UI 实践系列》笔记
    • 《移动端 实践系列》笔记
    • 《综合》笔记
  • 配置专栏

    • 《环境系列》笔记
  • 极空间

    • Docker
  • 影视

    • movie
  • 编辑器笔记

    • 开发编辑器
  • 浏览器笔记

    • Chrome
  • Mac笔记

    • Mac
  • 跨界学习

    • 运营
  • 破解合集

    • 破解
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 书单
    • 关于

Jamey

首页
导航站
  • 学习专栏

    • 《HTML》笔记
    • 《CSS》笔记
    • 《JavaScript》笔记
    • 《Vue》笔记
    • 《Git》笔记
    • 《规范》笔记
    • 《软技能》笔记
    • 《面试》笔记
    • 《持续集成&交付&部署》笔记
  • 踩坑专栏

    • 《Element-UI 实践系列》笔记
    • 《移动端 实践系列》笔记
    • 《综合》笔记
  • 配置专栏

    • 《环境系列》笔记
  • 极空间

    • Docker
  • 影视

    • movie
  • 编辑器笔记

    • 开发编辑器
  • 浏览器笔记

    • Chrome
  • Mac笔记

    • Mac
  • 跨界学习

    • 运营
  • 破解合集

    • 破解
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 书单
    • 关于
  • 手册

    • 常用 Git 命令清单
    • Git 变基合并
    • Git 迁移仓库并保留 commit 记录
    • Git SSH 多用户配置
      • 📖. 前言
      • 一. https 和 SSH 的区别:
      • 二. SSH 工作原理
      • 三. 基本的 Github SSH 配置
        • 1. 检查是否有 SSH key
        • 2. 创建一个 SSH key
        • 3. 测试配置是否成功
      • 四. 配置多个 SSH
        • 1. 生成 GitHub SSH
        • 2. 生成 Gitee SSH
        • 3. 生成公司 SSH
        • 4. 配置 config
        • 5. 测试配置是否成功
      • 五. 解决ssh权限问题():
      • 六. 设置 Git 提交的用户名
        • 1. 取消全局设置
        • 2. 单独设置用户名
      • 🌟. 命令总结
      • 🌟. 小结
    • Git 修改提交历史中的指定信息
  • 文档笔记

  • 《Git》笔记
  • 手册
Jamey
2022-04-26
目录

Git SSH 多用户配置

# Git SSH 多用户配置

# 📖. 前言

当我们使用 Git 时,常用的授权通常有两种方式:HTTPS 和 SSH。当选用 HTTPS 时,每次代码的增删改查都需要输入一串密码进行身份验证,影响代码提交效率,因此大部分情况下我们会使用 SSH 免密登录。 那么,在使用 SSH 免密登录过程中,你有遇到过什么问题吗?

很多朋友在用 github 管理项目的时候,都是直接使用 https url 克隆到本地,当然也有有些人使用 SSH url 克隆到本地。然而,为什么绝大多数人会使用https url克隆呢?

这是因为,使用 https url 克隆对初学者来说会比较方便,复制 https url 然后到 git Bash 里面直接用 clone 命令克隆到本地就好了。而使用 SSH url 克隆却需要在克隆之前先配置和添加好 SSH key 。

可是对于很多小伙伴来说,Git 账户基本都不仅仅一个,不单单是公司的 Gitlab、Gitee 等其他代码托管平台的账户,也会有自己个人的 GitHub 账户整理自己的学习代码,那如何在同一台电脑上,让这两个账户共存呢?

# 一. https 和 SSH 的区别:

  1. 前者可以随意克隆 github 上的项目,而不管是谁的;而后者则是你必须是你要克隆的项目的拥有者或管理员,且需要先添加 SSH key ,否则无法克隆。
  2. https url 在 push 的时候是需要验证用户名和密码的;而 SSH 在push的时候,是不需要输入用户名的,如果配置 SSH key 的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。

# 二. SSH 工作原理

SSH(Secure Shell) 是一种加密的网络传输协议,可以在不安全的网络中为网络服务提供安全的传输环境。SSH 以非对称加密实现身份验证,通过 C/S(client-server) 模式来实现。

具体交互见下图:

git_04-26_01

在我们上传代码到 github 服务器的过程中,github server 就会作为 SSH server 来接受客户端的请求,并返回 public key(即公钥) 给客户端。而客户端将会进行 public key 和 private key(即私钥)的匹配校验,最终建立连接。

在明白了 SSH 的原理之后,你可能会有点疑惑,这个公钥和私钥是怎么来的呢?下面我们就来解答这些疑问。

# 三. 基本的 Github SSH 配置

Git SSH 的公钥和私钥都是在客户端手动生成的。一般我们会将私钥保存在客户端,公钥配置在服务端。此处以 github 为例,我们一起来进行 SSH 的配置。

配置 SSH 秘钥:

  • 根据 github 文档 (opens new window) , 在客户端创建 SSH 公钥和私钥对,并将私钥添加到客户端的 ssh-agent 中。
  • 将公钥配置在 github 的相应账户中 (opens new window)
  • 测试配置是否成功

# 1. 检查是否有 SSH key

首先需要检查你电脑是否已经有 SSH key

$ cd ~/.ssh
$ ls
1
2

这两个命令就是检查是否已经存在 id_rsa.pub 或 id_dsa.pub 文件。

# 2. 创建一个 SSH key

$ ssh-keygen -t rsa -C "your_email@example.com"
1

代码参数含义:

  • -t 指定密钥类型,默认是 rsa ,可以省略。
  • -C 设置注释文字,比如邮箱。
  • -f 指定密钥文件存储文件名。

以上代码省略了 -f 参数,因此,运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的 SSH key 代码,如:

Generating public/private rsa key pair.
# Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]
1
2

当然,你也可以不输入文件名,使用默认文件名(单个 SSH 时推荐),那么就会生成 id_rsa 和 id_rsa.pub 两个秘钥文件。

接着又会提示你输入两次密码(该密码是你 push 文件的时候要输入的密码,而不是 github 管理者的密码),

这里 不要输入密码,直接按回车。那么 push 的时候就不需要输入密码,直接提交到 github 上了,如:

Enter passphrase (empty for no passphrase):
# Enter same passphrase again:
1
2

接下来,就会显示如下代码提示,如:

Your identification has been saved in /c/Users/you/.ssh/id_rsa.Enter passphrase
# Your public key has been saved in /c/Users/you/.ssh/id_rsa.pub.
# The key fingerprint is:
# 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com
1
2
3
4

当你看到上面这段代码的收,那就说明,你的 SSH key 已经创建成功,你只需要添加到 github 的 SSH key 上就可以了。

# 3. 测试配置是否成功

$ ssh -T git@github.com
1

如果看到如下结果,则证明配置成功,否则需要根据错误消息进行修改。

Hi yourusername! You’ve successfully authenticated, but GitHub does not provide shell access
1

# 四. 配置多个 SSH

# 1. 生成 GitHub SSH

$ ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/github_id_rsa
1

# 2. 生成 Gitee SSH

$ ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/gitee_id_rsa
1

# 3. 生成公司 SSH

$ ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/xxx_id_rsa
1

# 4. 配置 config

在 ~/.ssh 目录下新建一个 config 文件,添加如下内容(其中 Host 和 HostName 填写 git 服务器的域名,IdentityFile 指定私钥的路径)

# Default github user (first@mail.com)

# GitHub
Host github.com # 别名,随便定 后面配置地址有用
HostName github.com # 要连接的服务器
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa # 密钥文件的地址,注意是私钥

# Gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_id_rsa

# GitLab
Host xxx.com
HostName xxx.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/xxx_id_rsa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 5. 测试配置是否成功

$ ssh -T git@github.com
$ ssh -T git@gitee.com
$ ssh -T git@xxx.com
1
2
3
➜  ~ ssh -T git@github.com
Hi yourusername! You've successfully authenticated, but GitHub does not provide shell access.
1
2

# 五. 解决ssh权限问题():

通常一台电脑生成一个 ssh 不会有这个问题,当一台电脑生成多个 ssh 的时候,就可能遇到这个问题,解决步骤如下:

1) 查看系统 ssh-key 代理,执行如下命令

$ ssh-add -l
1

以上命令如果输出 The agent has no identities. 则表示没有代理。如果系统有代理,可以执行下面的命令清除代理:

$ ssh-add -D
1

2). 然后依次将不同的ssh添加代理,执行命令如下:

$ ssh-add ~/.ssh/github_id_rsa
$ ssh-add ~/.ssh/gitee_id_rsa
$ ssh-add ~/.ssh/xxx_id_rsa
1
2
3

你会分别得到如下提示:

Identity added: /Users/xxx/.ssh/github_id_rsa (your_email@example.com)
Identity added: /Users/xxx/.ssh/gitee_id_rsa (your_email@example.com)
Identity added: /Users/xxx/.ssh/xxx_id_rsa (your_email@example.com)
1
2
3

如果使用 ssh-add ~/.ssh/id_rsa 的时候报如下错误,则需要先运行一下 ssh-agent bash 命令后再执行 ssh-add ...等命令

Could not open a connection to your authentication agent.
1

然后按照 4.3 配置 config 进行配置即可。

# 六. 设置 Git 提交的用户名

# 1. 取消全局设置

是否设置过全局的 username 和 email,都先进行取消。

$ git config --global --unset user.name
$ git config --global --unset user.email
1
2

# 2. 单独设置用户名

在 repo 中使用不同的用户进行操作,进入 repo 目录后,需要先设置 username 和 email,然后再进行其他操作

$ git config user.name yourusername

$ git config user.email "youremail"
1
2
3

然后查看该 repo 目录下,你的用户名和密码信息:

$ git config user.name

$ git config user.password
1
2
3

# 🌟. 命令总结

  • 查看用户名 :git config user.name
  • 查看密码: git config user.password
  • 查看邮箱:git config user.email
  • 测试ssh:ssh -T git@github.com

# 🌟. 小结

本文是笔者在实践中的记录,也参考了一些网上优秀的作者经验,如有错误请指出。

参考资料

  • 通过 ssh config 配置 Git 多账户 SSH 登录 (opens new window)
  • Git通过配置config维护多个账号,区分个人账号和公司账号 (opens new window)
  • 同一台电脑上个人的github账户如何与公司的gitlab账户共存 (opens new window)
  • 解决使用git,ssh每次都要输入密码 (opens new window)
  • Gitee - Git配置多个SSH-Key (opens new window)

更进一步阅读,了解 SSH 知识:是否必须每次添加 ssh-add (opens new window) 和 《SSH,The Secure Shell》 (opens new window) 书本。

#Git
上次更新: 2022/07/08, 18:18:02
Git 迁移仓库并保留 commit 记录
Git 修改提交历史中的指定信息

← Git 迁移仓库并保留 commit 记录 Git 修改提交历史中的指定信息→

Theme by Vdoing | Copyright © 2017-2023 Jamey | blog 闽ICP备19022664号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式