zoukankan      html  css  js  c++  java
  • 多git账号配置解决方案

    生成密钥

    ssh-keygen -t rsa -C "gitlab 用户邮箱地址" ←┘
    Generating public/private rsa key pair.
    Enter file in which to save the key (/Users/user/.ssh/id_rsa): ←┘
    Enter passphrase (empty for no passphrase): ←┘
    Enter same passphrase again: ←┘
    ...
    
    github 密钥
    ssh-keygen -t rsa -C "github 用户邮箱地址" ←┘
    Generating public/private rsa key pair.
    Enter file in which to save the key (/Users/user/.ssh/id_rsa): id_rsa_github ←┘
    Enter passphrase (empty for no passphrase): ←┘
    Enter same passphrase again: ←┘
    ...
    
    ~/.ssh/ 目录下生成以下文件:
     - id_rsa
     - id_rsa.pub 
     - id_rsa_github
     - id_rsa_github.pub
    

    分别将 id_rsa.pub 和 id_rsa_github.pub 内容复制到 gitlab 或 github 的 ssh key 中

    添加 config 文件
    # gitlab
    Host gitlab
        HostName gitlab.com
        IdentityFile ~/.ssh/id_rsa
    
    # github
    Host github
        HostName github.com
        IdentityFile ~/.ssh/id_rsa_github
    
    测试连接

    gitlab

    ssh -T git@gitlab.com ←┘
    The authenticity of host 'gitlab.com (52.167.219.168)' can't be established.
    ECDSA key fingerprint is SHA256:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw.
    Are you sure you want to continue connecting (yes/no)? yes ←┘
    ...
    Welcome to GitLab, username!
    

    github

    ssh -T git@github.com ←┘
    The authenticity of host 'github.com (52.167.219.168)' can't be established.
    ECDSA key fingerprint is SHA256:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw.
    Are you sure you want to continue connecting (yes/no)? yes ←┘
    ...
    Hi username! You've successfully authenticated, but GitHub does not provide shell access.
    

    会在 ~/.ssh/ 目录下自动生成 known_hosts 文件

    测试连接失败,Permission denied (publickey).

    原因是,我们自定义了 id_rsa_github 钥匙名,默认情况下,连接会搜索 id_rsa 钥匙名,所以这里会失败
    可以通过 ssh -T -v git@github.com 了解连接失败的具体原因

    ssh-agent

    # 开启 agent
    eval $(ssh-agent -s) ←┘
    Agent pid 8428
    
    # 添加 钥匙名
    ssh-add ~/.ssh/id_rsa_github ←┘
    Identity added: /c/Users/user/.ssh/id_rsa_github (/c/Users/user/.ssh/id_rsa_github)
    
    # 查看 agent list
    ssh-add -l ←┘
    8428 SHA256:A9UcJMadwTpF7TvsT5LEXsSssTs5qehmV9Q2Q8Ntw3o /c/Users/user/.ssh/id_rsa_github (RSA)
    
    # 不用时可以关闭 agent
    eval $(ssh-agent -k) ←┘
    Agent pid 8428 killed
    

    注意:使用github时,记得在自己的项目下定义 local user.name 和 local user.email

    git config --local user.name ''
    git config --local user.email ''
    

    该文件的主要作用就是指明各个 git 帐号对应的 User 以及 IdentityFile 的文件位置。当配置完毕后,在各个项目 repo 中应用自己的用户名以及邮箱:

    1.取消 global
    git config --global --unset user.name
    git config --global --unset user.email
    
    2.设置每个项目 repo 的自己的 user.email
    git config  user.email "xxxx@xx.com"
    git config  user.name "ddfe"
    

    如果没有~/.ssh/ 目录

    尝试用 “ssh -vT git@git.xiaojukeji.com” 去查看 ssh 连接主机的 debug 信息,可能会生成该目录

    总结:
    使用命令 “ssh -vT git@xxx.com” 查看 ssh_config 文件的位置
    进入 ssh_config 文件,配置各个 git 帐号的 User 以及 IdentityFIle
    在各个项目中配置好 user.name 以及 user.email
    在各个 git 帐号间尽情穿梭吧~

    git 的 ssh 配置文件的位置不一定是 ~/.ssh/ssh_config,具体位置还是需要通过上面总结中的第一点进行查看。如果是 ssh 登录云主机的操作,配置文件的位置则可能是以下情况:

    用户配置文件 (~/.ssh/config)

    系统配置文件 (/etc/ssh/ssh_config)

    git仓库克隆项目时HTTPS跟SSH区别

    这两种方式的主要区别在于:
    使用https url克隆对初学者来说会比较方便,复制https url然后到git Bash里面直接用clone命令克隆到本地

    但是每次fetch和push代码都需要输入账号和密码,这也是https方式的麻烦之处。

    而使用SSH url克隆却需要在克隆之前先配置和添加好SSH key,因此,如果你想要使用SSH url克隆的话,你必须是这个项目的拥有者。

    否则你无法添加SSH key,另外ssh默认每次fetch和push代码不需要输入账号和密码,如果你想要每次都输入账号密码才能进行fetch和push也可以另外进行设置。

    ssh-keygen命令解释
    ssh-keygen -t rsa -C “youremail.com”
    在用Git生成密钥的时候,查询到的命令是:
    ssh-keygen -t rsa -C "邮件地址@youremail.com"

    ssh-keygen -t rsa -b 4096 -C "邮件地址@youremail.com"

    ssh
    SSH 为Secure Shell 的缩写,SSH 为建立在应用层基础上的安全协议。

    SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。

    利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

    ssh-keygen
    从客户端来看,SSH提供两种级别的安全验证:

    第一种级别(基于口令的安全验证):只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
    第二种级别(基于密钥的安全验证)ssh-keygen:需要依靠密钥,这里的密钥是非对称密钥。
    t : t是type的缩写
    -t即指定密钥的类型,密钥的类型有两种,一种是RSA,一种是DSA

    RSA和DSA
    RSA:RSA加密算法是一种非对称加密算法,是由三个麻省理工的牛人弄出来的,RSA是他们三个人姓的开头首字母组合。
    DSA:Digital Signature Algorithm (DSA)是Schnorr和ElGamal签名算法的变种。
    为了让两个linux机器之间使用ssh不需要用户名和密码。所以采用了数字签名RSA或者DSA来完成这个操作。

    ssh-keygen默认使用rsa密钥,所以不加-t rsa也行,如果你想生成dsa密钥,就需要加参数-t dsa。

    b :b是bit的缩写
    -b 指定密钥长度。

    4096
    对于RSA密钥,最小要求768位,默认是2048位。4096指的是RSA密钥长度为4096位。
    DSA密钥必须恰好是1024位(FIPS 186-2 标准的要求)。

    C:comment的缩写
    -C表示提供一个注释,用于识别这个密钥。 可以省略.

    “邮件地址@youremail.com”:用于识别这个密钥的注释内容
    引号里的内容为注释的内容,所以"双引号里面不一定得填邮箱,可以输入任何内容。

    SSH密钥的类型以及可供选择的密钥

    GitLab支持RSA,DSA,ECDSA和ED25519密钥。它们的区别在于签名算法,其中一些具有其他优势。有关更多信息,您可以在ArchWiki上阅读这篇 不错的文章。在这里,我们将重点介绍ED25519和RSA。

    注意:注意: 作为管理员,您可以限制应允许的键及其最小长度。默认情况下,允许所有密钥,GitLab.com也是如此 。

    ED25519 SSH密钥

    按照最佳做法,您应该始终喜欢ED25519 SSH密钥,因为它们比其他类型更安全并且具有更好的性能。

    ED25519 SSH密钥是OpenSSH 6.5中引入的,因此任何现代操作系统都应包括创建它们的选项。如果由于任何原因您与之交互的OS或GitLab实例不支持ED25519,则可以回退到RSA。

    注意:注意: Omnibus不随OpenSSH一起提供,因此它使用您的GitLab服务器上的版本。如果使用Omnibus,如果要使用ED25519 SSH密钥,请确保已安装的OpenSSH版本是6.5版或更高版本。

    RSA SSH密钥

    RSA密钥是最常见的密钥,因此与可能具有旧OpenSSH版本的服务器最兼容。如果GitLab服务器不适用于ED25519键,请使用它们。

    最小密钥大小为1024位,默认为2048。如果希望生成更强的RSA密钥对,请使用-b比默认值高的位值指定标志。

  • 相关阅读:
    [转]深度理解依赖注入(Dependence Injection)
    [转]控制反转(IOC)和依赖注入(DI)
    [转]依赖注入的概念
    [转]struct实例字段的内存布局(Layout)和大小(Size)
    异步编程模式
    HTTP协议返回代码含义
    [转]StructLayout特性
    Stack的三种含义
    FineUI登入的例子中遇到的一些问题
    编程以外积累: 如何给项目生成类似VS2008的说明文档
  • 原文地址:https://www.cnblogs.com/alter888/p/14709396.html
Copyright © 2011-2022 走看看