git lab 学习笔记1

本文档详细介绍了如何配置和使用GitLab与SSH密钥进行安全通信,包括支持的密钥类型、密钥生成、添加到GitLab账户、验证连接、以及针对不同场景的密钥管理,旨在帮助用户实现高效且安全的版本控制。

GitLab 和 SSH 密钥

Git 是一个分布式版本控制系统,这意味着你可以在本地工作, 然后共享或“推送”您的更改到服务器。 在这种情况下,服务器是 GitLab。

GitLab 使用 SSH 协议来安全地与 Git 通信。 当您使用 SSH 密钥对 GitLab 远程服务器进行身份验证时, 您无需每次都提供用户名和密码。

先决条件

要使用 SSH 与 GitLab 通信,您需要:

  • OpenSSH 客户端,预装在 GNU/Linux、macOS 和 Windows 10 上。
  • SSH 6.5 或更高版本。 早期版本使用 MD5 签名,这是不安全的。

要查看系统上安装的 SSH 版本,请运行 ssh -V.

支持的 SSH 密钥类型

要与 GitLab 通信,您可以使用以下 SSH 密钥类型:

管理员可以 限制允许使用的密钥及其最小长度

ED25519 SSH 密钥

一书 Go 的实用密码学 表明 ED25519 高效 密钥比 RSA 密钥更安全、更 。

OpenSSH 6.5 在 2014 年引入了 ED25519 SSH 密钥,它们应该在大多数 操作系统。

RSA SSH 密钥

可用文档表明 ED25519 比 RSA 更安全。

如果您使用 RSA 密钥,美国国家科学技术研究所在 出版物 800-57 第 3 部分 (PDF) 建议密钥大小至少为 2048 位。 默认密钥大小取决于您的版本 ssh-keygen. 回顾 man您已安装的页面 ssh-keygen命令了解详情。

查看您是否有现有的 SSH 密钥对

在创建密钥对之前,请查看密钥对是否已存在。

  1. 在 Windows、Linux 或 macOS 上,转到您的主目录。

  2. 前往 .ssh/子目录。 如果 .ssh/子目录不存在, 你要么不在主目录中,要么你没有使用过 ssh前。 在后一种情况下,您需要 生成 SSH 密钥对

  3. 查看是否存在具有以下格式之一的文件:

    算法公钥私钥
    ED25519(首选)id_ed25519.pubid_ed25519
    RSA(至少 2048 位密钥大小)id_rsa.pubid_rsa
    DSA(已弃用)id_dsa.pubid_dsa
    ECDSAid_ecdsa.pubid_ecdsa

生成 SSH 密钥对

如果您没有现有的 SSH 密钥对,请生成一个新的。

  1. 打开一个终端。

  2. 类型 ssh-keygen -t后跟键类型和可选注释。 此评论包含在 .pub创建的文件。 您可能希望使用电子邮件地址进行评论。

    例如,对于 ED25519:

    ssh-keygen -t ed25519 -C "<comment>"

    对于 2048 位 RSA:

    ssh-keygen -t rsa -b 2048 -C "<comment>"
  3. 按 Enter。 将显示类似于以下内容的输出:

    Generating public/private ed25519 key pair.
    Enter file in which to save the key (/home/user/.ssh/id_ed25519):
  4. 接受建议的文件名和目录,除非您正在生成 部署密钥 或者想要保存在您存储其他密钥的特定目录中。

    您还可以将 SSH 密钥对专用于 特定主机

  5. 指定 密码

    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
  6. 将显示确认信息,包括有关文件存储位置的信息。

A public and private key are generated. Add the public SSH key to your GitLab account and keep the private key secure.

配置 SSH 以指向不同的目录

如果您没有将 SSH 密钥对保存在默认目录中, 将您的 SSH 客户端配置为指向存储私钥的目录。

  1. 打开终端并运行以下命令:

    eval $(ssh-agent -s)
    ssh-add <directory to private SSH key>
  2. 将这些设置保存在 ~/.ssh/config文件。 例如:

    # GitLab.com
    Host gitlab.com
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/gitlab_com_rsa
    
    # Private GitLab instance
    Host gitlab.company.com
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/example_com_rsa

    有关这些设置的更多信息,请参阅 man ssh_configSSH 配置手册中的页面。

公共 SSH 密钥对于 GitLab 必须是唯一的,因为它们绑定到您的帐户。 当您使用 SSH 推送代码时,您的 SSH 密钥是您拥有的唯一标识符。 它必须唯一地映射到单个用户。

更新您的 SSH 密钥密码

您可以更新 SSH 密钥的密码。

  1. 打开终端并运行以下命令:

    ssh-keygen -p -f /path/to/ssh_key
  2. 在出现提示时,输入密码并按 Enter。

将您的 RSA 密钥对升级为更安全的格式

如果您的 OpenSSH 版本在 6.5 和 7.8 之间, 您可以更安全地保存您的私人 RSA SSH 密钥 OpenSSH 格式。

  1. 打开终端并运行以下命令:

    ssh-keygen -o -f ~/.ssh/id_rsa

    或者,您可以使用更安全的加密格式生成新的 RSA 密钥 以下命令:

    ssh-keygen -o -t rsa -b 4096 -C "<comment>"

将 SSH 密钥添加到您的 GitLab 帐户

要将 SSH 与 GitLab 结合使用,请将您的公钥复制到您的 GitLab 帐户。

  1. 复制公钥文件的内容。 您可以手动执行此操作或使用脚本。 例如,要将 ED25519 密钥复制到剪贴板:

    苹果系统:

    tr -d '\n' < ~/.ssh/id_ed25519.pub | pbcopy

    Linux (需要 xclip包裹):

    xclip -sel clip < ~/.ssh/id_ed25519.pub

    Windows 上的 Git Bash:

    cat ~/.ssh/id_ed25519.pub | clip

    代替 id_ed25519.pub用你的文件名。 例如,使用 id_rsa.pub为 RSA。

  2. 登录 GitLab。

  3. 在右上角,选择您的头像。

  4. 选择 首选项

  5. 从左侧边栏中,选择 SSH Keys

  6. 在“ 密钥” 公钥 框中,粘贴 的内容。 如果您手动复制密钥,请确保复制整个密钥, 以 ssh-ed25519要么 ssh-rsa,并可能以评论结束。

  7. 标题 文本框中,键入说明,例如 Work Laptop 家庭工作站

  8. 可选的。 在 过期时间 框中,选择一个过期日期。 (在 引入 GitLab 12.9 中 。) 到期日期仅供参考,并不妨碍您使用 钥匙。 但是,管理员可以查看到期日期和 时使用它们作为指导 删除键

    • GitLab 每天 02:00 AM UTC 检查所有 SSH 密钥。 它通过电子邮件发送所有在当前日期到期的 SSH 密钥的到期通知。 ( 引入 在 GitLab 13.11 中 。)
    • GitLab 每天 01:00 AM UTC 检查所有 SSH 密钥。 它通过电子邮件发送所有计划在 7 天后到期的 SSH 密钥的到期通知。 ( 引入 在 GitLab 13.11 中 。)
  9. 选择 添加密钥

验证您是否可以连接

验证您的 SSH 密钥是否已正确添加。

  1. 对于 GitLab.com,为确保您连接到正确的服务器,请确认 SSH 主机密钥指纹

  2. 打开终端并运行此命令,替换 gitlab.example.com使用您的 GitLab 实例 URL:

    ssh -T git@gitlab.example.com
  3. 如果这是您第一次连接,您应该验证 GitLab 主机的真实性。 如果您看到如下消息:

    The authenticity of host 'gitlab.example.com (35.231.145.151)' can't be established.
    ECDSA key fingerprint is SHA256:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'gitlab.example.com' (ECDSA) to the list of known hosts.

    类型 yes并按 Enter。

  4. 跑过 ssh -T git@gitlab.example.com再次命令。 您应该会收到 欢迎使用 GitLab, @username信息。

如果没有出现欢迎消息,您可以通过运行进行故障排除 ssh 在详细模式下:

ssh -Tvvv git@gitlab.example.com

对不同的存储库使用不同的密钥

您可以为每个存储库使用不同的密钥。

打开终端并运行以下命令:

git config core.sshCommand "ssh -o IdentitiesOnly=yes -i ~/.ssh/private-key-filename-for-this-repository -F /dev/null"

此命令不使用 SSH 代理,需要 Git 2.10 或更高版本。 了解更多信息 在 ssh命令选项,请参见 man两个页面 sshssh_config.

在单个 GitLab 实例上使用不同的帐户

您可以使用多个帐户连接到 GitLab 的单个实例。 您可以使用 的命令执行此操作 上一主题中 。 但是,即使您设置 IdentitiesOnlyyes,如果出现以下情况,您将无法登录 IdentityFile存在 在一个之外 Host堵塞。

相反,您可以为主机分配别名 ~.ssh/config文件。

  • 为了 Host, 使用别名 user_1.gitlab.comuser_2.gitlab.com. 高级配置 更难维护,这些字符串更容易 了解何时使用诸如 git remote.
  • 为了 IdentityFile,使用路径私钥。
# User1 Account Identity
Host <user_1.gitlab.com>
  Hostname gitlab.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/<example_ssh_key1>

# User2 Account Identity
Host <user_2.gitlab.com>
  Hostname gitlab.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/<example_ssh_key2>

现在,克隆一个存储库 user_1, 采用 user_1.gitlab.com在里面 git clone命令:

git clone git@<user_1.gitlab.com>:gitlab-org/gitlab.git

更新别名为的先前克隆的存储库 origin

git remote set-url origin git@<user_1.gitlab.com>:gitlab-org/gitlab.git

笔记: 私钥和公钥包含敏感数据。 确保权限 在文件上使它们对您可读,但其他人无法访问。

配置两因素身份验证 (2FA)

您可以设置两步验证 (2FA) 通过 SSH 进行 Git

在 Eclipse 上使用 EGit

如果您使用 EGit ,您可以 将您的 SSH 密钥添加到 Eclipse

在 Microsoft Windows 上使用 SSH

如果您运行的是 Windows 10,则可以使用 的 适用于 Linux Windows 子系统 (WSL) WSL 2 这 两者都有 gitssh预安装,或安装 Git for Windows 以 通过 Powershell 使用 SSH。

WSL 中生成的 SSH 密钥不能直接用于 Git for Windows,反之亦然, 因为两者都有不同的主目录:

  • WSL: /home/<user>
  • 适用于 Windows 的 Git: C:\Users\<user>

您可以复制 .ssh/目录使用相同的密钥,或在每个环境中生成一个密钥。

替代工具包括:

覆盖 GitLab 服务器上的 SSH 设置

GitLab 与系统安装的 SSH 守护进程集成并指定一个用户 (通常命名为 git) 处理所有访问请求。 用户 通过 SSH 连接到 GitLab 服务器的人由他们的 SSH 密钥标识 他们的用户名。

SSH 客户端 在 GitLab 服务器上执行的 操作是这样执行的 用户。 您可以修改此 SSH 配置。 例如,您可以指定 此用户用于身份验证请求的私有 SSH 密钥。 然而,这种做法 是 不支持 ,并强烈反对,因为它提出显著 安全风险。

GitLab 检查此条件,并指导您 如果您的服务器是这样配置的,请转到本节。 例如:

$ gitlab-rake gitlab:check

Git user has default SSH configuration? ... no
  Try fixing it:
  mkdir ~/gitlab-check-backup-1504540051
  sudo mv /var/lib/git/.ssh/id_rsa ~/gitlab-check-backup-1504540051
  sudo mv /var/lib/git/.ssh/id_rsa.pub ~/gitlab-check-backup-1504540051
  For more information see:
  [Overriding SSH settings on the GitLab server](#overriding-ssh-settings-on-the-gitlab-server)
  Please fix the error above and rerun the checks.

尽快删除自定义配置。 这些自定义 是 明确不支持的 ,并且可以随时停止工作。

SSH 连接故障排除

当你跑 git clone,系统可能会提示您输入密码,例如 git@gitlab.example.com's password:. 这表明您的 SSH 设置有问题。

  • 确保您正确生成了 SSH 密钥对并添加了公共 SSH 您的 GitLab 个人资料的关键。
  • 尝试使用手动注册您的私有 SSH 密钥 ssh-agent.
  • 尝试通过运行调试连接 ssh -Tv git@example.com. 代替 example.com使用您的 GitLab URL。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值