git在本地配置多个ssh key账户(使用两个git账号)

9,510 阅读3分钟

大多数时候,我们的机器上会有很多的git host,比如公司gitlab、github、oschina等,那我们就需要在本地配置多个ssh key,使得不同的host能使用不同的ssh key ,做法如下(以公司gitlab和github为例):

1. 生成两个sshkey

  1. 为公司生成一对秘钥ssh key
$ ssh-keygen -t rsa -C "你的邮箱@xxx.com" -f ~/.ssh/id_rsa_gitlab
  1. 为github生成一对秘钥ssh key
$ ssh-keygen -t rsa -C "你的邮箱@xxx.com" -f ~/.ssh/id_rsa_github

注意:

  • 如果没有使用-f指令,不要一路回车,要对文件进行重命名。
  • 输入路径:/c/Users/Admin/.ssh/id_rsa_gitlab id_rsa_gitlab是新的文件名
  • (暂时还少一个文件,在第5步会出现该文件)

2. 配置 config

我们需要在目录:

  • linux: ~/.ssh/
  • windows: C:\Users\admin\.ssh\,创建config文件(无后缀名),并且配置ssh key的路由策略。

  • 创建config文件:
$ touch config

linux 下 config 配置:

# gitlab
Host gitlab.com
    HostName gitlab.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_gitlab
# github
Host github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_github
# 配置文件参数
# Host Host可以看作是一个你要识别的模式,对识别的模式,进行配置对应的的主机名和ssh文件
# HostName 要登录主机的主机名
# User 登录名
# PreferredAuthentications publickey,password,keyboard-interactive
# IdentityFile 指明上面User对应的identityFile路径

windows 下 config 配置:

# gitlab
Host gitlab.com
    HostName gitlab.com
    PreferredAuthentications publickey
    IdentityFile C:\\Users\\\admin\\.ssh\\id_rsa_gitlab
# github
Host github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile C:\\Users\\\admin\\.ssh\\id_rsa_github
# 配置文件参数
# Host Host可以看作是一个你要识别的模式,对识别的模式,进行配置对应的的主机名和ssh文件
# HostName 要登录主机的主机名
# User 登录名
# PreferredAuthentications publickey,password,keyboard-interactive
# IdentityFile 指明上面User对应的identityFile路径
  • Host : 相当于一个别名,远程仓库地址的域名别名它涵盖了下面一个段的配置,我们可以通过他来替代将要连接的服务器地址。这里可以使用任意字段或通配符。访问ssh的时候如果服务器地址能匹配上这里Host指定的值,则Host下面指定的HostName将被作为最终的服务器地址使用,并且将使用该Host字段下面配置的所有自定义配置来覆盖默认的/etc/ssh/ssh_config配置信息。
  • HostName :真正连接的服务器地址
  • User:自定义的用户名
  • PreferredAuthentications 指定优先使用哪种方式验证,支持密码和秘钥验证方
    • publickey,password publickey,keyboard-interactive
  • IdentityFile:指定本次连接使用的密钥文件

3. 添加sshkey到仓库设置

通过查看 ~/.ssh/id_rsa.pub 文件内容,获取到你的 public key

cat ~/.ssh/id_rsa.pub

8143044-ba40c2e25e75888f.webp

  • 在github,gitLab,Tgit相应的位置,找到SSH-key的配置位置,用记事本打开.ssh文件夹下的id_rsa.pub文件(公钥,没有pub的是私钥,私钥很重要,不能随意透漏出去),这个文件中存放的就是刚才生成的ssh-key;把文件中所有的字符串复制,粘贴到相应位置中保存即可.
  • 添加公钥: 复制生成后的 ssh key,通过仓库主页 「管理」->「部署公钥管理」->「添加部署公钥」 ,将生成的 public key 添加到仓库中。

4. 配置全局git 用户和邮箱

在Git Bash中运行以下两条配置命令,将用户名和Github注册邮箱配置为全局账户: (电脑设备配置过一次即可,其余时候可以省略不管,不影响)

$ git config --global user.name "your_username"  #设置用户名

$ git config --global user.email "your_registered_github_Email"  #设置邮箱地址(建议用注册giuhub的邮箱)

5. 验证是否成功

连接测试

$ ssh -T git@github.com  //github的检测
$ ssh -T git@gitlab.com  //gitlab的检测 其他的如T-git也类似,就是换个网址

(Warning之后会生成第3步缺失的known_hosts文件) (里面是一些远程库的域名和SSH钥匙信息)

  • 这时候会提示Are you sure you want to continue connecting (yes/no)?,意思是#确认你是否继续连接,输入yes并点击回车(一定要输入yes)
  • 如果生成ssh key的时候密码不为空,则会看到类似于这样的提示:Enter passphrase for key '/c/Users/xxxx_000/.ssh/id_rsa':,意思是#生成ssh kye是密码为空则无此项,若设置有密码则有此项且,输入生成ssh key时设置的密码即可;
  • 如果能看到类似于Hi XXXX! You've successfully authenticated, but GitHub does not provide shell access.这样的提示,则表示ssh key配置成功!(有的时候也不见得会如此显示,我在配置git时就报了一个莫名其妙的错误,什么0通道被占用,反正有问题google一下,去建一个远程仓库测试一下能否正常clone,push)

5. 拉取项目设置

通过上述设置,就可以通过不同的Host来针对不同的git仓库和git项目使用不同的ssh key。 注意:通常情况下我们从git仓库拉取的项目ssh访问地址,类似这种git@git仓库地址:用户名/项目名.git。一定要把这里的git仓库地址替换为ssh config里面设定的Host。

[root@hostname .ssh]# git clone git@gitee.com:用户名/项目名.git
替换为如下
[root@hostname .ssh]# git clone git@gitee_two.com:用户名/项目名.git

6. 关联本地已有的项目

通过上述设置,就可以通过不同的Host来针对不同的git仓库和git项目使用不同的ssh key。 注意:通常情况下我们将本地仓库与git远程仓库进行关联时的地址是ssh访问地址时,类似这种git@git仓库地址:用户名/项目名.git。一定要把这里的git仓库地址替换为ssh config里面设定的Host。

git remote add origin  git@gitee.com:用户名/项目名.git 
git remote add origin  git@gitee_two.com:用户名/项目名.git

参考地址: