关闭

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

标签: Git多帐号多个SSH密钥管理Ubuntu-GitCentOS-Git
6419人阅读 评论(1) 收藏 举报
分类:

版权声明:转载必须注明本文转自严振杰的博客: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"

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

$ 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
  • 如果你是局域网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到SSH-Agent时报错

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

Could not open a connection to your authentication agent.

那么请执行eval $(ssh-agent)命令后再重试,如果还不行,请再执行ssh-agent bash命令后重试。
如果还不行,请参考:StackOverFlow·ssh-Could not open a…


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

5
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Mac下配置多个SSH-Key

生成SSH-Key打开终端,前往.ssh目录 生成一个SSH-Key$ ssh-keygen -t rsa -C "youremail@email.com"自定义生成key的名字设置密码成功生成SSH...
  • ymmqwe
  • ymmqwe
  • 2016-12-06 09:54
  • 3931

window环境下为git配置多个SSH密钥

使用情境:当你需要一个git管理你的公司的项目gitlab,另一个git管理你的gitHub的时候,你会发现新建一个ssh 会覆盖掉原来的ssh,并导致原来的失效。以下直接上干活:新建一个git ss...
  • baijunzhijiang_01
  • baijunzhijiang_01
  • 2016-05-28 14:22
  • 2411

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

首先这篇文章适用于Windows和Linux的配置,本人没有条件去验证Mac,所以不确定是否可以,不过和linux一样属于Unix系统,应该理论上都是可以的,如果有人实验了可以给我个反馈。 这段时间...
  • u010523770
  • u010523770
  • 2017-06-16 16:06
  • 223

git多仓库多帐号管理及相关配置

SSH的密钥管理主要包括两个方面:生成公钥/私钥对以及公钥(私钥自己保密)的分发。多个github仓库和多个github帐号需要生成多个密钥对。假设有用户user_one 下的仓库one,地址为git...
  • tcy9099
  • tcy9099
  • 2017-11-17 10:09
  • 28

github新建项目并且git多个ssh密钥

常常需要建立多人共享文件,或者多台电脑进行协同办公,在github中中建立仓库,同时一个电脑多个ssh密钥。 本文是笔者完成之后对这个项目进行回顾的,可能顺序存在问题。供参考。 一。首先登录g...
  • qq_34149581
  • qq_34149581
  • 2017-05-17 12:15
  • 451

github使用(通过webstorm创建一个nodejs项目的本地git库,推送到github进行管理,(ssh密钥无用户密码方式))

通过webstorm创建一个nodejs项目的本地git库,推送到github进行管理,(ssh密钥无用户密码方式) 1. 先在github.com上注册用户(https://git...
  • chaos_king1
  • chaos_king1
  • 2016-11-27 18:49
  • 1225

git 多帐号配置

背景: 学习git的时候, 大家刚开始使用之前都配置了一个全局的用户名和邮箱。git config --global user.name "test" git config --global use...
  • HEYUTAO007
  • HEYUTAO007
  • 2018-01-02 13:32
  • 59

Pycharm配置git提交的账户以及SSH密钥

Pycharm配置git提交的账户: git 修改当前的project的用户名的命令为:**git config user.name 你的目标用户名**; git 修改当前的project提交邮箱的命...
  • Gooooa
  • Gooooa
  • 2018-01-03 15:40
  • 67

Git 配置 SSH密钥

Git 配置 SSH 密钥需要有 GitHub 工程 SSH 地址和 SSH 密钥文件,由创建者提供密钥文件用 TXT 打开如下 下面使用 TortoiseGit 操作说明,在 TorgoiseGi...
  • LIQIANGEASTSUN
  • LIQIANGEASTSUN
  • 2017-12-08 20:02
  • 34

git配置ssh密钥

git配置ssh密钥 如果主机(当前登录用户)之前没有git账号,即添加第一个git账号,并配置ssh密钥时, 按照如下的步骤: 1 cd  ~/.ssh 2 ssh-keygen -t r...
  • linger2012liu
  • linger2012liu
  • 2015-06-25 19:52
  • 2842
    个人资料
    • 访问:1609984次
    • 积分:6527
    • 等级:
    • 排名:第4285名
    • 原创:52篇
    • 转载:0篇
    • 译文:1篇
    • 评论:1274条
    我的微信公众号
    欢迎关注我的公众号,不定期为您推送优选博文,生活趣事!
    关注我的微信公众号

    关注我的微博
    友情链接


    我的Github

    QQ交流群 547839514

    博客专栏