Git配置多个公钥,对应不同的代码库,解决遇到的各种问题

本文详细介绍了如何为个人和公司项目分别配置SSH密钥,以实现免密登录GitHub和GitLab。通过创建并添加不同的私钥到ssh-agent,以及配置~/.ssh/config文件,确保根据不同域名选择正确的私钥。同时,还解决了新开窗口需要重新输入密码的问题,通过创建.bashrc文件使得设置在新开窗口中依然有效。
摘要由CSDN通过智能技术生成

需求:实际上一台电脑配置一个公钥就可以实现不同代码库的提交和拉取代码,但是楼主想配两个密钥,一个对应自己平时写一些Demo使用,一个对应公司自己部署的一个Gitlab项目。

创建多个SSH-Key

  1. 使用ssh-key生成公钥和私钥
# 生成ssh-key,~/:指的是C盘用户的地址,一般是C:\Users\Administrator\.ssh
# 作为github使用
ssh-keygen -t rsa -C "username@email.com" -f ~/.ssh/id_rsa

# 生成第二个ssh-key,指的是公司的地址。username可以定义为你在公司提交的名字,生成密钥
# 作为gitlab使用
ssh-keygen -t rsa -C "username1@email.com" -f ~/.ssh/gs_rsa
  1. 进入到~/.ssh目录下

    这时候看到4个文件,分别为id_rsa、id_rsa_pub、gs_rsa、gs_rsa_pub,后面的操作是将id_rsa_pub、gs_rsa_pub的密钥添加到对应的代码库上,比如github,gitlab等等。这个自己找一下

    带有pub后缀的是公钥,没有带的是私钥。

  2. 使用ssh-add添加私钥

    因为Git默认使用id_rsa,我们需要将密钥添加进去,同时配置config,作用是告知Git,让Git根据不同的域名选择不同的私钥

    # 右键打开Git Base Here
    ssh-add ~/.ssh/id_rsa
    ssh-add ~/.ssh/gs_rsa
    
    # 如果提示:Could not open a connection to your authentication agent,则先执行这个命令
    ssh-agent bash
    

    查看是否添加成功

    ssh-add -l
    # 如果成功,会打印出SHA256:你的私钥,一串加密字符串 rsa的地址
    

    创建config文件

    # 创建命令
    touch ~/.ssh/config
    

    config文件配置的信息

    # 说明:
    # 注释
    # Host 为域名别名
    # Hostname 真实地址
    # User 用户名
    # IdentityFile rsa的地址
    # PreferredAuthentications 认证方式(publickey--公钥的方式)
    
    # 账号1-github
        HOST github.com
        hostname github.com
        User xiaoshishu
        IdentityFile C:\Users\Administrator\.ssh\id_rsa
        PreferredAuthentications publickey
    
    # 账号2-公司的gitlan私服
        HOST gitlab.gs.com
        hostname gitlab.gs.com # 公司git项目的地址,ip或者是域名
        User gs_userName
        IdentityFile C:\Users\Administrator\.ssh\gs_rsa
        PreferredAuthentications publickey
    

    验证是否生效

    ssh -T git@github.com
    ssh -T git@gitlab.gs.com
    # 如果返回You've successfully authenticated中的,则表示成功连接。
    

    注意!

    使用ssh-agent bash这个命令,只是定义一个临时回话,将你的私钥添加到Git的ssh-key中,而config配置文件的作用,是告知Git说你要根据域名去找对应的私钥,要先把私钥添加到Git的ssh-key中,要先有因,后有果。

    所以这里就存在一个问题,你必须要在当前这个窗口操作,不能重新开窗口,因为临时设置,新开窗口就无效了。而Git会默认取id_rsa,所以哪怕你设置了config也无效。

    楼主照着网上帖子设置,结果一旦新开窗口拉取项目,就提示要密码

    # 错误信息,不必理会
    git@gitlab.gs.com’s password:
    Permission denied, please try again
    
  3. 创建.bashrc文件,右键Git Base Here之后,会自动加入ssh-key到Git中

    # 创建./bashrc,创建.profile 也是可以的。默认会读取这两个。
    touch ~/.bashrc
    

    .bashrc文件配置的信息

    # Note: ~/.ssh/environment should not be used, as it
    #       already has a different purpose in SSH.
    
    env=~/.ssh/agent.env
    
    # Note: Don't bother checking SSH_AGENT_PID. It's not used
    #       by SSH itself, and it might even be incorrect
    #       (for example, when using agent-forwarding over SSH).
    
    agent_is_running() {
        if [ "$SSH_AUTH_SOCK" ]; then
            # ssh-add returns:
            #   0 = agent running, has keys
            #   1 = agent running, no keys
            #   2 = agent not running
            ssh-add -l >/dev/null 2>&1 || [ $? -eq 1 ]
        else
            false
        fi
    }
    
    agent_has_keys() {
        ssh-add -l >/dev/null 2>&1
    }
    
    agent_load_env() {
        . "$env" >/dev/null
    }
    
    agent_start() {
        (umask 077; ssh-agent >"$env")
        . "$env" >/dev/null
    }
    
    if ! agent_is_running; then
        agent_load_env
    fi
    
    # if your keys are not stored in ~/.ssh/id_rsa or ~/.ssh/id_dsa, you'll need
    # to paste the proper path after ssh-add
    if ! agent_is_running; then
        agent_start
        ## 你需要更改的就这两个地方
        ssh-add ~/.ssh/id_rsa
        ssh-add ~/.ssh/gs_rsa
    elif ! agent_has_keys; then
        ssh-add ~/.ssh/id_rsa
        ssh-add ~/.ssh/gs_rsa
    fi
    
    unset env
    

    这个不是放在.ssh文件夹下面,而是放在C:\Users\Administrator 这个文件夹下面。

    之后重新启动,直接右键git Base Here,输入 ssh -T git@github.com,测试,成功即解决。这里楼主贴的是人家的,脚本这一块是薄弱项,需要花点时间学习下。记录之

小知识点

不同私钥对应不同的用户名

查看使用到的全局用户信息

#查看全局配置 主要看user.name user.email user.password
git config --list

#移除全局配置账户
git config --global --unset user.name
#查看全局用户名 已经显示为空了,说明移除成功
git config --global user.name
# 移除全局配置邮箱
git config --global --unset user.email
# 再查看全局邮箱 已经显示为空了,说明移除成功
git config --global user.email
# 移除全局密码
git config --global --unset user.password
# 查看全局密码 已经显示为空了,说明移除成功
git config --global user.password

移除成功之后,进入到你拉取的Git项目里面,右键打开 git Base Here

# 设置提交的用户名和邮箱名称。
git config user.name "gs_userName"
git config user.email "gs_userName@email.com"
  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值