生成 SSH Key

生成 SSH Key

GitCode目前支持如下两类SSH 密钥:

ED25519 SSH 密钥

Practical Cryptography With Go 一书中表明 ED25519 密钥比 RSA 密钥更为安全。2014年 OpenSSH 6.5 引入 ED25519 SSH 密钥后,当前任何操作系统都可用使用这种密钥。

你可以使用以下命令创建和配置 ED25519 密钥:

ssh-keygen -t ed25519 -C "your_email@example.com" 

-C(例如带引号注释的电子邮件地址)是标记 SSH 密钥的可选方法,请将上述邮箱替换为您的电子邮件地址。

你将看到类似于以下内容的响应:

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519): 

当系统提示你保存密钥时,默认情况下,私钥被保存在~/.ssh/id_ed25519文件中,而公钥被保存在~/.ssh/id_ed25519.pub文件中。如果你不想在默认位置保存你的密钥,或者想为你的密钥文件命名,可以指定一个新的文件名:

ssh-keygen -t ed25519 -C "your_email@example.com"  -f ~/.ssh/my_custom_key

当然如果你想设置一个密码 来保护你的私钥,可以在提示时输入密码。

Enter passphrase (empty for no passphrase):
Enter same passphrase again: 

如果成功,你将看到有关ssh-keygen命令将标识和私钥保存在何处的确认信息。

Your identification has been saved in /Users/.ssh/id_ed25519
Your public key has been saved in /Users/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:x8gFyNRIg5UsIhqYOnsDYhyxXJNhwBU2WcLs11b421g your_email@example.com
The key's randomart image is:
+--[ED25519 256]--+
|o+*@*O==o        |
|*o*=* *o.o       |
|+=o. .. o .      |
|*o . . + = E     |
|o+  . . S B      |
|. o      + .     |
| . .             |
|                 |
|                 |
+----[SHA256]-----+

RSA SSH 密钥

如果你使用 RSA 密钥生成 SSH 密钥,则我们建议你使用4096位( 至少2048 位)的密钥大小. 默认情况下 ssh-keygen命令会创建一个 1024 位 RSA 密钥.

你可以使用以下命令创建和配置 RSA 密钥,如果需要,可以生成建议的最小密钥大小2048

ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 

-C标志(例如带引号注释的电子邮件地址)是标记 SSH 密钥的可选方法,请将上述邮箱替换为您的电子邮件地址。

你将看到类似于以下内容的响应:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): 

当系统提示你保存密钥时,默认情况下,私钥被保存在~/.ssh/id_rsa文件中,而公钥被保存在~/.ssh/id_rsa.pub文件中。如果你不想在默认位置保存你的密钥,或者想为你的密钥文件命名,可以指定一个新的文件名:

ssh-keygen -t ed25519 -C "your_email@example.com"  -f ~/.ssh/my_custom_key

当然如果你想设置一个密码 来保护你的私钥,可以在提示时输入密码。

Enter passphrase (empty for no passphrase):
Enter same passphrase again: 

如果成功,你将看到有关ssh-keygen命令将标识和私钥保存在何处的确认信息。

Your identification has been saved in /Users/.ssh/id_rsa
Your public key has been saved in /Users/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:Ub+LOdZzqYTdq5t+mDAErdkTtzUbnB8VPXJs/cTBDPA your_email@example.com
The key's randomart image is:
+---[RSA 4096]----+
|         ....o==B|
|        ..o.o.*O=|
|        .= o.E+*+|
|        o.+ ... o|
|        S. ..    |
|          o* o . |
|          *o*o+  |
|         . oo=.. |
|           .*+.  |
+----[SHA256]-----+

注意: 如果你使用 7.8 或更低版本的 OpenSSH,请参考OpenSSH 6.5 ~ 7.8 的 RSA 密钥的介绍。

OpenSSH 6.5 ~ 7.8 的 RSA 密钥

在 OpenSSH 7.8 之前,RSA 密钥的默认公共密钥指纹基于 MD5,因此并不安全。

如果你的 OpenSSH 版本介于 6.5 至 7.8(含)之间,请使用-o选项运行ssh-keygen ,以更安全的 OpenSSH 格式保存你的 SSH 私钥。

如果你已经具有可用于 GitCode 的 RSA SSH 密钥,请考虑对其进行升级以使用更安全的密码加密格式。 你可以使用以下命令进行操作:

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

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

ssh-keygen -o -t rsa -b 4096 -C "email@example.com" 

注意: ED25519 已将密钥加密为更安全的 OpenSSH 格式。

添加 SSH 密钥到你的 GitCode

现在,你可以将创建好的 SSH 密钥复制到你的 GitCode 帐户。以ED25519 SSH 密钥为例,你可以参考以下步骤:

  1. 复制公钥:从以文本格式保存 SSH 密钥的位置复制你的SSH 密钥的公钥,以下命令可以将 ED25519 的信息保存到指定操作系统的剪贴板中:

    macOS:

    pbcopy < ~/.ssh/id_ed25519.pub 
    

    Linux(需要 xclip 软件包):

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

    Windows 上的 Git Bash:

    cat ~/.ssh/id_ed25519.pub | clip 
    

    如果你使用的是 RSA 密钥,相应地替换即可。

  2. 登录GitCode:首先,请确保你已登录到GitCode帐户

  3. 进入设置:点击页面右上角的头像,选择“个人设置”

  4. 选择公钥管理:在左侧导航栏中,选择“公钥管理- SSH 公钥”选项卡

  5. 添加公钥:点击「+ SSH 公钥」按钮

  6. 本地生成 SSH 公钥:按照指南生成 SSH 公钥,这通常涉及在本地系统上运行一些命令以生成密钥对(公钥和私钥)

  7. 添加公钥:将生成的SSH公钥粘贴到“公钥”字段中,并为密钥提供一个描述性标题

  8. 创建 SSH 公钥:点击「新建」按钮以保存 SSH 公钥

注意: 如果你手动复制了公共 SSH 密钥,请确保复制了整个密钥,以ssh-ed25519 (或ssh-rsa )开头,并以你的电子邮件地址结尾。

测试 SSH 密钥是否能够正常工作

要测试是否正确添加了 SSH 密钥,可以在终端中运行以下命令:

ssh -T git@gitcode.com

在你第一次通过 SSH 方式连接到 GitCode的时候,将会询问你是否信任将要连接的 GitCode host地址。当确认 yes 后,会将 GitCode 作为已知主机添加到受信任的 hosts 地址中:

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

一旦添加到已知主机列表中,将不再要求你再次验证 GitCode 主机的真实性。 再次运行以上命令时,你将只收到欢迎使用 GitCode 的@username 信息。

如果未出现欢迎消息,则可以通过使用以下命令在详细模式下运行ssh来解决问题:

ssh -Tv git@gitcode.com 

使用非默认路径的 SSH 密钥

如果你为 SSH 密钥对使用了非默认文件路径,请配置 SSH 客户端以指向 GitCode 私有 SSH 密钥。

可以运行以下命令进行配置:

eval $(ssh-agent -s)
ssh-add <path to private SSH key> 

以上设置将会保存到~/.ssh/config文件中。以下是两个专用于 GitCode 的 SSH 密钥示例:

# GitCode
  Host gitcode.com
  Preferredauthentications publickey
  IdentityFile ~/.ssh/gitcode_rsa

# Github instance
  Host github.com
  Preferredauthentications publickey
  IdentityFile ~/.ssh/example_github_rsa 

公共 SSH 密钥对于 GitCode 必须是唯一的,因为它们将绑定到你的账号中。 SSH 密钥是通过 SSH 推送代码时唯一的标识符,这是为什么它需要唯一地映射到单个用户的原因。

为项目设置 SSH 密钥

如果要根据正在使用的项目代码仓库使用不同的密钥,则可以在代码仓库中执行以下命令:

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

这不使用 SSH 代理,并且至少需要 Git 2.10.

多账号设置

为项目设置 SSH 密钥方法还适用于在 GitCode 中使用多个账号的情况。

此外,你也可以直接在~.ssh/config为主机分配别名。 如果在.ssh/config中的Host块之外设置了IdentityFile ,则 SSH 和作为扩展的 Git 将无法登录. 这是 SSH 组装IdentityFile条目的方式,因此不能通过将IdentitiesOnly设置为yes来更改. IdentityFile条目应指向 SSH 密钥对的私钥。

**注意:**私钥和公钥应仅由用户读取,通过运行以下chmod 0400 ~/.ssh/<example_ssh_key>在 Linux 和 macOS 上完成此操作: chmod 0400 ~/.ssh/<example_ssh_key>chmod 0400 ~/.ssh/<example_sh_key.pub>

# User1 Account Identity Host <user_1.gitcode.com>
  Hostname gitcode.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/<example_ssh_key1>

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

注意: 为提高效率和透明度,示例Host别名定义为user_1.gitcode.comuser_2.gitcode.com 。 高级配置难以维护,使用这种别名在使用其他工具(如git remote子命令)时会更容易理解。 SSH 可以将任何字符串理解为Host别名,因此Tanuki1Tanuki2尽管提供了很少的上下文指向它们,也可以使用.

克隆GitCode代码仓库通常如下所示:

git clone git@ggitcode.com:repo-org/repo.git 

要为user_1克隆它,请将gitcode.com替换为 SSH 别名user_1.gitcode.com

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

使用git remote命令可以修复以前克隆的代码仓库。

以下的示例假定远程代码仓库被别名为origin

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

Eclipse

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

Windows系统

如果你运行的是 Windows 10, 适用于 LinuxWindows 子系统(WSL)及其最新的WSL 2版本,则支持安装不同的 Linux 发行版,其中包括 Git 和 SSH 客户端。

对于当前版本的 Windows,你还可以通过Git for Windows安装 Git 和 SSH 客户端。

替代工具包括:

故障排除

如果在 Git Clone 上,系统会提示你输入密码,例如git@gitcode.com's password:,则表明你的 SSH 设置有问题。

  • 确保你正确地生成了 SSH 密钥,并将公共 SSH 密钥添加到了你 GitCode 账号的 SSH 密钥中
  • 尝试使用ssh-agent手动注册你的私有 SSH 密钥,如本文档前面所述
  • 尝试通过运行ssh -Tv git@gitcode.com调试连接