当前位置:   article > 正文

Git配置多个公钥,对应不同的代码库,解决遇到的各种问题_安装完git生成的密钥可以对应多个gitlab吗

安装完git生成的密钥可以对应多个gitlab吗

需求:实际上一台电脑配置一个公钥就可以实现不同代码库的提交和拉取代码,但是楼主想配两个密钥,一个对应自己平时写一些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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    查看是否添加成功

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

    创建config文件

    # 创建命令
    touch ~/.ssh/config
    
    • 1
    • 2

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    验证是否生效

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

    注意!

    使用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
    
    • 1
    • 2
    • 3
  3. 创建.bashrc文件,右键Git Base Here之后,会自动加入ssh-key到Git中

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

    .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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    这个不是放在.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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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

# 设置提交的用户名和邮箱名称。
git config user.name "gs_userName"
git config user.email "gs_userName@email.com"
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/184546
推荐阅读
相关标签
  

闽ICP备14008679号