• Git管理多个SSH密钥,Git多帐号配置


    Git管理多个SSH密钥,Git多帐号配置

    转自:https://blog.csdn.net/yanzhenjie1003/article/details/69487932

    ssh-keygen -t rsa -C "smallajax@foxmail.com"

    输入密钥文件名字,如

    github_rsa

    到这里生成SSH-KEY的事就完成了,你在当前文件夹会看到两个文件:

    github_rsa  github_rsa.pub

     

    SSH-KEY生成了,接着给服务器和客户端配置SSH-KEY

    1. 第一步把github_rsa.pub中的公钥内容添加到GitSSH
    2. 第二步为SSH配置私钥位置
    3. .ssh文件夹新建一个名为config的文件,用它来配置多个SSH-KEY的管理。

    Linux进入.ssh文件夹:cd ~/.ssh,新建config文件:touch config;或者:touch ~/.ssh/config。这里要注意,没有.ssh文件夹的要新建一个.ssh名的文件夹。

    Window进入C:/Users/你的用户名/.ssh文件夹,右键新建一个文本文件,改名为config即可。这里要注意,没有.ssh文件夹的要新建一个.ssh名的文件夹。

    下面来填写config文件的内容,我以GithubGitlibOSChina,局域网为例:

    Host github.com
        HostName github.com
        User smallajax@foxmail.com
        PreferredAuthentications publickey
        IdentityFile /home/Workspace/ssh/id_rsa_github
    Host gitlib
    .com
        HostName gitlib.com
        User smallajax@foxmail.com
        PreferredAuthentications publickey
        IdentityFile id_rsa_gitlib
    Host oschina
    .com
        HostName oschina.com
        User smallajax@foxmail.com
        PreferredAuthentications publickey
        IdentityFile /D/Workspace/ssh/id_rsa_oschina

     

    测试

    ssh -T git@github.com

     

     

    2017年04月06日 22:55:56 严振杰 阅读数:13189

    版权声明:转载须标明本文转自严振杰的博客 https://blog.csdn.net/yanzhenjie1003/article/details/69487932

    版权声明:转载必须注明本文转自严振杰的博客:http://blog.yanzhenjie.com

    首先这篇文章适用于WindowsLinux的配置,本人没有条件去验证Mac,所以不确定是否可以,不过和Linux一样属于Unix系统,应该理论上都是可以的,如果有人实验了可以给我个反馈。

    这段时间在Ubuntu上做开发,又一次发现命令是真好用,加上这段时间把服务器从Windows迁到CentOS,也渐渐习惯了Vim

    之前一直在Winodws下开发,开发中使用的版本管理工具是SVNGit,不过都会使用Tortoise类似的客户端工具,对于Git多帐号的情况,它可以动态管理SSH-KEY。不顾我在在Ubuntu下开发时没有发现这样的工具,几个IDE也需要配置SSH,于是干脆用命令了,在配置多个SSH-KEY花了我一个多小时才搞定,中间也由于细节不熟悉浪费了点时间,现在仅仅做个记录,如果能帮到其它遇到同样问题的同学也就更棒了。

     

    SSH之于Git的原理

    Git提交时有HttpsSSH两种验证方式,Https的方式需要帐号和密码比较好理解,不过它需要在每次提交时输入帐号和密码,有点麻烦;而SSH的功能可以粗暴的理解为记住帐号密码,不过对这个过程有人会有点疑惑。首先,我们用SSH命令生成一个公钥-私钥对,我们会把公钥添加到Git的服务器,把私钥放在本地。提交文件的时候Git服务器会用公钥和客户端提交私钥做验证(具体细节不究),如果验证通过则提交成功,那么我们在把公钥添加到服务器的时候肯定是需要登录Git服务器的,这个过程其实可以理解为帐号和密码托管给SSH了,所以也是相当于输入了帐号密码,但是由SSH帮你记住了。这么理解是可以,但是SSH的意义不仅仅是这样,关于SSH的更详细内容看客可以自行再了解。

    生成SSH-KEY

    打开命令行、终端,用命令进入到你要保存SSH-KEY文件的文件夹,我们先用命令测试下终端是否支持SSH

    ssh -V

    如果你的终端支持SSH,那么你可能看到类似如下的版本信息:

    OpenSSH_7.3p1, OpenSSL 1.0.2j  26 Sep 2016

    测试时如果提示不识别SSH命令,需要安装SSH

    Ubuntu安装SSH

    sudo apt-get install openssh-client openssh-server

    CentOS安装SSH

    yum install openssh-client openssh-server

    Windows可以在当前文件夹右键,选择Git Bash Here,会自动在当前文件夹打开一个MINGW的命令行窗体,它是自带SSH的。

    接下来在刚才的文件夹,使用SSH命令在当前文件夹生成一对SSH-KEY:

    ssh-keygen -t rsa -C "邮箱地址"

    •  

    ssh-keygen -t rsa -C "smallajax@foxmail.com"

    • 1

    接下来会出来提示信息,完整的大概是这样:

    $ ssh-keygen -t rsa -C "smallajax@foxmail.com"
    Generating public/private rsa key pair.
    Enter file in which to save the key (~/.ssh/id_rsa):

    这里需要输入SSH-KEY的文件名字,这里名字理论上可以随便取,但是我们今天要说配置多个SSH-KEY,所以请分别查看以下两节:

    • 单个Git帐号的配置——全局Git配置
    • 多个Git帐号的配置——局部Git配置

    单个Git帐号的配置——全局Git配置

    大部分人使用Git一般是一个帐号,所以接着上面的讲。

    上面说到输入ssh-keygen命令生成SSH-KEY密钥对文件时需要输入文件名称,如果你仅仅要配置一个帐号,那么我们输入默认名称即可:id_rsa

    接着会要求输入私钥的密码,并且需要确认密码,为了安全在密码输入的时候不会反显,什么都看不到,这个密码你自己设置,但是你一定要记住:

    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:

    到这里生成SSH-KEY的事就完成了,你在当前文件夹会看到两个文件:

    id_rsa  id_rsa.pub

    SSH-KEY生成了,接着给服务器和客户端配置SSH-KEY

    1. 第一步把id_rsa.pub中的公钥内容添加到GitSSH中,如果你使用Github或者Gitlib,在个人设置中会找到。
    2. 第二步把SSH-KEY配置给SSH,让系统的SSH知道这个KEY

    Linuxid_rsa文件拷贝到~/.ssh文件夹下,命令如下:

    cp id_rsa ~/.ssh/

    Windowid_rsa文件拷贝到C:/Users/你的用户名/.ssh文件夹下。

    拷贝完成后,把.ssh文件夹下的id_rsa文件添加到SSH-Agent,命令如下:

    ssh-add id_rsa文件的路径

    例如Linuxssh-add ~/.ssh/id_rsa,如果命令行此时正在.ssh文件夹下:ssh-add id_rsa即可,Windows同理。

    此时添加时如果遇到错误,请参考本文最后一节:添加SSH到SSH-Agent时报错

    最后,执行以下命名配置Git全局用户和邮箱:

    git config --global user.name "你的名字"
    git config --global user.email "你的邮箱"

    例如:

    git config --global user.name "YanZhenjie"
    git config --global user.email "smallajax@foxmail.com"

    配置全局用户和邮箱完成后,我们可以查看: 

    Linux用户打开~/.gitconfig文件即可看到配置:

    vim ~/.gitconfig

    Windows用户打开C:/Users/你的用户名/.gitconfig即可看到配置,内容大概如下:

    [user]
        name =
    YanZhenjie
        email = smallajax@foxmail.com

    此时配置全部结束,请查看下方测试SSH-KEY配置是否成功进行测试。

    多个Git帐号的配置——局部Git配置

    又有很多人同时使用多个Git帐号,比如GithubOSChinaGitlib等,再接着上面讲配置多个Git帐号。

    上面说到输入ssh-keygen命令生成SSH-KEY密钥对文件时需要输入文件名称,如果你要配置多个帐号,就根据爱好输入KEY文件的名字吧,例如为Github配置就输入:id_rsa_github,为OSChina配置就输入:id_rsa_oschina

    接着会要求输入私钥的密码,并且需要确认密码,为了安全在密码输入的时候不会反显,什么都看不到,这个密码你自己设置,但是你一定要记住:

    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:

    到这里生成SSH-KEY的事就完成了,你在当前文件夹会看到两个文件:

    id_rsa_github  id_rsa_github.pub

    SSH-KEY生成了,接着给服务器和客户端配置SSH-KEY

    1. 第一步把id_rsa_github.pub中的公钥内容添加到GitSSH中,如果你使用Github或者Gitlib,在个人设置中会找到。
    2. 第二步为SSH配置私钥位置,这里和上面配置单个Git帐号不一样,不过单个帐号也可以按照多个帐号的配置方法来配置。

    下面我们需要在.ssh文件夹新建一个名为config的文件,用它来配置多个SSH-KEY的管理。

    Linux进入.ssh文件夹:cd ~/.ssh,新建config文件:touch config;或者:touch ~/.ssh/config。这里要注意,没有.ssh文件夹的要新建一个.ssh名的文件夹。

    Window进入C:/Users/你的用户名/.ssh文件夹,右键新建一个文本文件,改名为config即可。这里要注意,没有.ssh文件夹的要新建一个.ssh名的文件夹。

    下面来填写config文件的内容,我以GithubGitlibOSChina,局域网为例:

    Host github.com
        HostName github.com
        User smallajax@foxmail.com
        PreferredAuthentications publickey
        IdentityFile /home/Workspace/ssh/id_rsa_github
    Host gitlib
    .com
        HostName gitlib.com
        User smallajax@foxmail.com
        PreferredAuthentications publickey
        IdentityFile id_rsa_gitlib
    Host oschina
    .com
        HostName oschina.com
        User smallajax@foxmail.com
        PreferredAuthentications publickey
        IdentityFile /D/Workspace/ssh/id_rsa_oschina
    Host
    192.168.1.222
        HostName 192.168.1.222
        User smallajax@foxmail.com
        PreferredAuthentications publickey
        IdentityFile /D/Workspace/ssh/id_rsa_oschina

    解释一下,HostName是服务器的地址,User是用户名,PreferredAuthentications照抄即可,这里主要说的是IdentityFile,上面我们看到了三种情况,所以它的书写原则是:

    1. 填私钥文件的本地路径。
    2. 不论是Linux还是Windows都可以写相对路径,比如把id_rsa_xxx私钥文件放在.ssh文件夹下。
    3. 文件放在不同跟路径下时,需要写绝对路径 
      1. Linux中没有放在.ssh文件夹内或者子文件夹。
      2. Windows中没有放在C盘下时。注意据对路径变化,比如C盘下是/C/xo/abc、比如D盘下/D/ssh/id_rsa这样,还看不懂请参考上方例子。

    拷贝完成后,把所有的id_rsa私钥文件添加到SSH-Agent,命令如下:

    ssh-add id_rsa文件的路径

    • 例如添加.ssh文件夹下的,Linux这样做:ssh-add ~/.ssh/id_rsa,如果你在.ssh文件夹下:ssh-add id_rsa即可,Windows同理。

    此时添加时如果遇到错误,请参考本文最后一节:添加SSH到SSH-Agent时报错

    最后,还剩下项目的用户和邮箱没有配置,和配个单个Git帐号的方式不同,这里我们需要为每个项目分别配置,所以要命令行进入仓库文件夹再设置。第一种情况是先从Gitpull仓库下来,第二种情况是本地初始化Git仓库,总之进入改仓库文件夹后:

    git config --local user.name "你的名字"
    git config --local user.email "你的邮箱"

    例如:

    git config --local user.name "YanZhenjie"
    git config --local user.email "smallajax@foxmail.com"

    不过麻烦的一点是如果是多个项目就需要挨个配置,不过我们一般是pull一个项目就配置一下,也仅仅需要配置一次即可。

    注意配置单个Git帐号时,是不进入项目文件夹就可以,不过不是使用--local,而是使用--global就可以全局配置。

    配置项目用户和邮箱完成后,我们可以进入项目文件夹下的.git文件夹查看config文件内容,大概内容如下:

    ...
    [user]
        name = YanZhenjie
        email = smallajax@foxmail.com

    此时配置全部结束,请查看下方测试SSH-KEY配置是否成功进行测试。如果配置成功,你就可以clone和commit了。

    测试SSH-KEY配置是否成功

    配置全部结束,我们来测试一下配置是否成功:

    • 如果你是Github:

    ssh -T git@github.com

    • 如果是你Gitlib:

    ssh -T git@gitlib.com

    • 1
      • 如果你是局域网192.168.1.222:

    ssh -T git@192.168.1.222

    • 其它自行举一反三吧。

    此时需要输入刚才生成SSH-KEY时输入的私钥密码,输入后自行观察信息判断是否连接成功。

    • 比如Github的信息是:

    Hi yanzhenjie! You've successfully authenticated, but GitHub does not provide shell access

    •  
      • 比如Gitlib的信息是:

    Welcome to GitLab, YanZhenjie!

    如果不能执行测试命令或者提示什么错误了,请执行ssh-agent bash完后再执行测试命令,如果还不行就是配置有问题了。

    添加SSH到SSH-Agent时报错

    如果执行ssh-add ...命令提示如下错误:

    Could not open a connection to your authentication agent.

    那么请执行eval $(ssh-agent)命令后再重试,如果还不行,请再执行ssh-agent bash命令后再执行eval $(ssh-agent)后执行添加命令。另外上述测试配置的命令不能执行时也可以在ssh-agent bash执行完后再测试。

    那么请执行eval $(ssh-agent)命令后再重试,如果还不行,请再执行ssh-agent bash命令后再执行eval $(ssh-agent)后执行添加命令。另外上述测试配置的命令不能执行时也可以在ssh-agent bash执行完后再测试。

  • 相关阅读:
    POJ3320 Jessica's Reading Problem
    POJ3320 Jessica's Reading Problem
    CodeForces 813B The Golden Age
    CodeForces 813B The Golden Age
    An impassioned circulation of affection CodeForces
    An impassioned circulation of affection CodeForces
    Codeforces Round #444 (Div. 2) B. Cubes for Masha
    2013=7=21 进制转换
    2013=7=15
    2013=7=14
  • 原文地址:https://www.cnblogs.com/thewindkee/p/12873147.html
Copyright © 2020-2023  润新知