Git管理多个SSH密钥,Git多帐号配置
版权声明:转载须标明本文转自严振杰的博客 https://blog.csdn.net/yanzhenjie1003/article/details/69487932
版权声明:转载必须注明本文转自严振杰的博客:http://blog.yanzhenjie.com
首先这篇文章适用于Windows和Linux的配置,本人没有条件去验证Mac,所以不确定是否可以,不过和Linux一样属于Unix系统,应该理论上都是可以的,如果有人实验了可以给我个反馈。
这段时间在Ubuntu上做开发,又一次发现命令是真好用,加上这段时间把服务器从Windows迁到CentOS,也渐渐习惯了Vim。
之前一直在Winodws下开发,开发中使用的版本管理工具是SVN和Git,不过都会使用Tortoise类似的客户端工具,对于Git多帐号的情况,它可以动态管理SSH-KEY。不顾我在在Ubuntu下开发时没有发现这样的工具,几个IDE也需要配置SSH,于是干脆用命令了,在配置多个SSH-KEY花了我一个多小时才搞定,中间也由于细节不熟悉浪费了点时间,现在仅仅做个记录,如果能帮到其它遇到同样问题的同学也就更棒了。
SSH之于Git的原理
Git提交时有Https和SSH两种验证方式,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。
第一步把id_rsa.pub中的公钥内容添加到Git的SSH中,如果你使用Github或者Gitlib,在个人设置中会找到。
第二步把SSH-KEY配置给SSH,让系统的SSH知道这个KEY。
Linux把id_rsa文件拷贝到~/.ssh文件夹下,命令如下:
cp id_rsa ~/.ssh/
Window把id_rsa文件拷贝到C:/Users/你的用户名/.ssh文件夹下。
拷贝完成后,把.ssh文件夹下的id_rsa文件添加到SSH-Agent,命令如下:
ssh-add id_rsa文件的路径
例如Linux:ssh-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帐号,比如Github、OSChina、Gitlib等,再接着上面讲配置多个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。
第一步把id_rsa_github.pub中的公钥内容添加到Git的SSH中,如果你使用Github或者Gitlib,在个人设置中会找到。
第二步为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文件的内容,我以Github、Gitlib、OSChina,局域网为例:
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,上面我们看到了三种情况,所以它的书写原则是:
填私钥文件的本地路径。
不论是Linux还是Windows都可以写相对路径,比如把id_rsa_xxx私钥文件放在.ssh文件夹下。
文件放在不同跟路径下时,需要写绝对路径
Linux中没有放在.ssh文件夹内或者子文件夹。
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帐号的方式不同,这里我们需要为每个项目分别配置,所以要命令行进入仓库文件夹再设置。第一种情况是先从Git上pull仓库下来,第二种情况是本地初始化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-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执行完后再测试。
参考:StackOverFlow·ssh-Could not open a…
Git管理多个SSH密钥,Git多帐号配置的更多相关文章
- SourceTree Git可视化管理工具通过 ssh 密钥登录
整个流程分三步:① 生成SSH密钥:② Github/Gitee/Coding 代码托管平台绑定公钥:③ SourceTree 拉取代码 1.生成 SSH 密钥 这里直接使用 SourceTree 来 ...
- Sourcetree配置ssh密钥 - git图形化工具(二)
这里主要介绍Sourcetree如何导入已经生成好的ssh私钥,如何生成ssh私钥自行百度. 如果Sourcetree没有配置ssh密钥,克隆时会提示如下错误: 仓库类型:这是一个无效的源路径/URL ...
- git使用方法----如何利用git管理代码?如何使用git将代码传到github中去
## 在文件夹中打开 git here; 1.git init ===初始化一个仓库(这个仓库会存放,git对我们代码进行备份的文件)2.配置个人信息 -- --在git中设置当前使用的用户是==( ...
- git多站点帐号配置
事件场景 小明同学是一个非常努力的coder,业余时间都花在了github.com上面,因为公司的台式机性能比较好,小明同学想在公司电脑上面也进行开发.但是github上面的帐号邮箱跟公司分配的帐号邮 ...
- 添加SSH keys到github帐号
使用git clone命令从github上同步github上的代码库时,如果使用SSH链接(如我自己的esesgrid项目:git@github.com:hmilycc/esesgrid.git),而 ...
- Git多帐号配置,管理多个SSH
查看自己所有的SSH-Key $ cd ~/.ssh $ ls id_rsa id_rsa.pub known_hosts 如果你已经创建过git账号那你可能和我一样会看到只有一个SSH-Key, 这 ...
- 初次使用git配置以及git如何使用ssh密钥(将ssh密钥添加到github)
初次安装git配置用户名和邮箱 初次安装git需要配置用户名和邮箱,否则git会提示:please tell me who you are. 你需要运行命令来配置你的用户名和邮箱: $ git con ...
- Git 使用SSH密钥操作
git使用ssh密钥 git支持https和git两种传输协议,github分享链接时会有两种协议可选: git协议链接图例 : ↓ https协议链接图例:↓ git使用https协议,每次pull ...
- 如何配置 SSH 密钥连接 Git 仓库
SSH 是 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:是建立在应用层基础上的安全协议. SSH 是目前较可靠,专为远程登录会话和其 ...
随机推荐
- logger.error完整打印错误堆栈信息
所以我们的写法可以是: Logger.error("xxx出错" , e); //第二个参数是e 而不是: Logger.error("xxx出错:" + e) ...
- Python pip 安装与使用
pip 是 Python 包管理工具,该工具提供了对Python 包的查找.下载.安装.卸载的功能. 目前如果你在 python.org 下载最新版本的安装包,则是已经自带了该工具. Python 2 ...
- 转:ASP.NET前台代码绑定后台变量方法总结
经常会碰到在前台代码中要使用(或绑定)后台代码中变量值的问题.一般有<%= str%>和<%# str %>两种方式,这里简单总结一下.如有错误或异议之处,敬请各位指教. 一方 ...
- cisco查看机框 板卡 电源 SN 风扇环境运行状态和一些常用命令 巡检命令
查看设备运行环境及状态 show environment 查看设备环境show environment temperature --查设备温度 show environment fans --查看设备 ...
- ZooKeeper 分布式协调服务介绍
0. 说明 从自己的独立博客迁移,该部分为 Zookeeper分布式协调服务介绍 原文链接 ZooKeeper 指南 1. ZooKeeper 简介 [官方介绍] ZooKeeper 是一种集中式服 ...
- 某某D的手伸的实在太长了,路由器也未能幸免,致被阉割的TP-Link
前段时间整了个服务器架上l2tp.server, TP-Link路由连上去后,全网走l2tp通道,而且不能配置相关的路由表 然后研究啊 找啊 查啊,确定是路由没有这功能 找客服问了一下,他一听就懂了, ...
- 【Alpha go】Day 2!
[Alpha go]Day 2! Part 0 · 简要目录 Part 1 · 项目燃尽图 Part 2 · 项目进展 Part 3 · 站立式会议照片 Part 4 · Scrum 摘要 Part ...
- 阿里八八Alpha阶段Scrum(9/12)
今日进度 叶文滔: 成功完成多级悬浮按钮,并添加与日程输入界面的连接.debug了一些对接产生的问题 黄梅玲: 合并单日项目至多日.获取json数据 王国超: 完成了初步的多日界面,pull至项目.进 ...
- SQL SERVER 2005镜像配置(有无见证服务器都行)
我用的是没有见证的,但找的文章里有镜像,所以都做一下补充,两个网址做的参考, 之所以在从他们那再补充一次是为了怕有一天他们的文章被删了我这还有个备用的,这两篇写的不错 其他的都不行 特别乱,这是找的最 ...
- PyQt5--EventHandler
# -*- coding:utf-8 -*- ''' Created on Sep 14, 2018 @author: SaShuangYiBing ''' import sys from PyQt5 ...