git支持使用一个账号对全局进行配置(只连接一个服务器),也支持对不同的本地仓库进行独立账号配置,本文展示使用git进行ssh公私钥配置的流程,包含了本人在配置过程中遇到的一些坑以及其他教程没有讲明的一些细节

[!NOTE]
如果使用Windows,推荐使用Git Bash进行操作,原生支持~符号,自动解析为当前用户根目录

1. 账号配置

全局配置

如果仅使用一个固定服务器的远程仓库(比如github),推荐进行全局配置

git config --global user.name "your_user_name"
git config --global user.email "your_email@xxx.com"

单个本地仓库配置

  1. 首先跳转到你想要进行配置的仓库目录 cd "your_repo_dir"
  2. 如果之前配置了全局账号,先清楚配置
git config --unset user.name
git config --unset user.email
  1. 进行独立配置
git config user.name "your_user_name"
git config user.email "your_email@xxx.com"

2. 生成密钥对

命令
密钥一般统一保存在~/.ssh文件夹中,全局配置时会从中自动读取

ssh-keygen -t "specific_type_of_key" -f "path_to_save_key" -C "your_email@xxx.com"
# 参数解释
# -t 指定密钥类型,默认为rsa
# -f 密钥保存路径,默认为~/.ssh/id_rsa,为不同服务器配置时推荐添加不同后缀便于辨认
# -C 注释文字,一般使用邮箱

# sample
ssh-keygen -t rsa -f ~/.ssh/id_rsa.github -C myaccount@github.com

enter之后会提示

Enter passphrase (empty for no passphrase):

这里的passphrase是push文件到远程仓库时输入的密码,可以按回车直接跳过,不进行设置
之后就会提示

# sample
Your identification has been saved in C:\Users\you\.ssh\id_rsa.github # 私钥,用于每次登录验证
Your public key has been saved in C:\Users\you\.ssh\id_rsa.github.pub #公钥
The key fingerprint is:
SHA256:OY91/EZToNgBLYmyTtYa1L4j0HzuajyIwQBCdIs+6GA myaccount@github.com

看到这段信息时说明SSH密钥对已经生成成功,可以到相应文件目录下进行查看公钥和私钥两个文件

3. 密钥配置

公钥配置

将公钥配置到服务器网站。用文本编辑器打开刚刚生成的公钥文件,复制里面的内容,粘贴到你想进行远程仓库连接的服务器网站的SSH key配置板块中,每个网站进行配置的区域会有所不同,以github为例,在setting -> SSH and GPG keys -> New SSH key中进行配置

私钥配置

为了与远程仓库进行连接,我们需要将私钥添加到ssh-agent信任列表当中,这样与特定网站进行连接时ssh会使用agent中的私钥进行逐个尝试配对,如果没有事先添加相应的私钥,在连接时会出现报错,比如Permission denied (publickey)

# 命令
ssh-agent bash # 启动ssh agent
ssh-add [private_key_path]
# e.g.
ssh-add ~/.ssh/id_rsa.github

# 如果添加成功,会显示以下内容
Identitiy added: ~/.ssh/id_ras_github

但是这样的操作方式有一定局限性,连接只在agent保持运行时有效,即每次关闭git终端重新打开后需要重新进行手动配置,以及如果密钥列表里密钥的数量太多可能会触发SSH服务器的尝试次数限制
当然你可以对ssh-agent进行更多个性化配置,但是这里我们推荐使用config文件来自动配置密钥
首先需要在~/.ssh目录下创建一个无后缀的config,可以通过以下方式建立

/在Windows cmd中输入以下任一命令
echo. > config /或
type nul > config /或
copy nul config
# 在git bash中输入以下任一命令
touch config
echo "" > config
# 或先建立一个config.txt,然后进行
mv config.txt config

config文件的配置格式:

Host github # Host: 网站的别名,不建议更改
	HostName github.com # HostName: 网站的域名或IP地址
	User git # User: SSH连接的系统用户,统一使用git
	IdentityFile ~/.ssh/id_rsa_github # IdentityFile: 私钥的绝对路径

更多可配置的参数选项参考ssh_config
经过配置之后,通过执行ssh [Host]命令就可以连接到服务器

4. 测试和调试

检查git与某个服务器的连接状态

ssh -T git@[host]
ssh -T git@github.com

# 详细模式 查看调试信息
ssh -vT git@github.com
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐