工作过程中,经常会使用到多个git仓库,每个git仓库对应一个账号,可以理解为每个git仓库对应一个ssh key,因此我们需要管理多个ssh key。
 
一、快速创建ssh key
 
1. 创建SSH keys:

mkdir -p ~/.ssh
ssh-keygen -t rsa  -C "your_email@example.com" -f .ssh/id_rsa_xxx

2. 添加存在的SSH keys:
第一步,启动ssh-agent环境:
Git Bash:

 # start the ssh-agent in the background
eval "$(ssh-agent -s)"
Agent pid 59566

其它终端:

# start the ssh-agent in the background 
eval $(ssh-agent -s)
Agent pid 59566

第二步:

#id_rsa指你存在的private ssh key,如名为"id_rsa_git"

ssh-add ~/.ssh/id_rsa

3. 测试ssh配置
借助github测试,需先把ssh publish key添加到github账号:https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/

#建议开启v,输出详细信息。i代表你的私钥路径。
ssh -i ~/.ssh/id_rsa_git -vT git@github.com
结果如下:

#省略debug输出
Hi your_email@example.com! You've successfully authenticated, but GitHub does not provide shel
l access.

 
注意 : ssh-add 这个命令不是用来永久性的记住你所使用的私钥的。实际上,它的作用只是把你指定的私钥添加到 ssh-agent 所管理的一个 session 当中。而 ssh-agent 是一个用于存储私钥的临时性的 session 服务,也就是说当你重启之后,ssh-agent 服务也就重置了。
 
 
二、多个ssh keys解决方案
1. 在~/.ssh目录创建config,配置config管理多个ssh keys。

touch ~/.ssh/config

内容如下:

#github网站使用User=git
Host github
     HostName github.com
     User git
     IdentityFile ~/.ssh/id_rsa_git
 
#code.csdn网站
Host code.csdn.net
     HostName code.csdn.net
     User csdn
     IdentityFile ~/.ssh/id_rsa_csdn

2. windows配置ssh-agent随GIT BASH启动
由于priavte key不是默认名字id_rsa,因此每次打开git bash需要重复执行ssh-agent,ssh-add,然后再进行ssh操作,比较麻烦,因此我们通过脚本实现自动化。
参见:https://help.github.com/articles/working-with-ssh-key-passphrases/#auto-launching-ssh-agent-on-msysgit
在~目录创建.profile:

touch ~/.profile

# 复制下面脚本到~/.profile

# 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
    ssh-add
    agent_start
    #指定你的多个keys,每个一行。如:ssh-add ~/.ssh/id_rsa_git
elif ! agent_has_keys; then
    ssh-add
 
    #指定你的多个keys,每个一行。如:ssh-add ~/.ssh/id_rsa_git
fi
 
unset env

重新打开GIT BASH,看到如下信息:

bash: /c/Users/xxx/.ssh/agent.env: No such file or directory
Identity added: /c/Users/xxx/.ssh/id_rsa_git (/c/Users/xxx/.ssh/id_rsa_git)
Identity added: /c/Users/xxx/.ssh/id_rsa_csdn (/c/Users/xxx/.ssh/id_rsa_git)

查看进程"ssh-agent"已运行后,打开GIT BASH:

ssh -vT git@gitlab.alibaba-inc.com

看到类似结果(有裁剪):

debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /c/Users/xxx/.ssh/id_rsa_git
Hi xxx! You've successfully authenticated, but GitHub does not provide shell access. 

至此,Windows环境Git管理多个SSH KEYS完成,Linux/MAC等*unix类似。
 
三、TortoiseGit/SourceTree配置
TortoiseGit是常见的GIT GUI工具,它使用ppk。
 
1. 打开TortoiseGit/PuTTYgen,并加载之前生成好的ssh private key(如~/.ssh/id_rsa_git)。
 
2. 点击"save private key"保存为ppk文件。
3. 打开TortoiseGit/Pageant,点击"Add key"添加上面生成的ppk文件。
 
可以使用TortoiseGit代替GIT BASH操作github、gitlab等东东了。
 
SourceTree与TortoiseGit操作方案类似,不同的是操作页面不一样。
 
四、其他ssh key注意事项
~/.ssh目录在*unix权限为700:chmod 700 ~/.ssh,在windows不需要。
 
对于指定私钥,设置密码:

ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

Git多个SSH KEYS解决方案(含windows自动化、TortoiseGit、SourceTree等)的更多相关文章

  1. 为github帐号添加SSH keys(Linux和Windows)

    文章转自:https://blog.cofface.com/archives/406.html/2 一.Linux增加ssh keys方法: 使用git clone命令从github上同步github ...

  2. Ubuntu下升级Git以及获取ssh keys的代码

    今天开始用的git,记下获取ssh keys 的代码 ? 1 2 3 ssh-keygen -t rsa -C "your_email@example.com" # Enter f ...

  3. Git安装及SSH Key管理之Windows篇

    一.安装环境 1.本机系统:Windows 10 Pro(64位)2.Git版本:Git-2.11.0-64-bit.exe(64位) 二.Git安装 去官网下载完后一路下一步完成安装,如下图:   ...

  4. 创建SSH keys用于添加到Git服务器上

    SSH keys SSH key 可以让你在你的电脑和Git服务器之间建立安全的加密连接.先执行以下语句来判断是否已经存在本地公钥: cat ~/.ssh/id_rsa.pub 如果你看到一长串以 s ...

  5. Git 进阶指南(git ssh keys / reset / rebase / alias / tag / submodule )

    在掌握了基础的 Git 使用 之后,可能会遇到一些常见的问题.以下是猫哥筛选总结的部分常见问题,分享给各位朋友,掌握了这些问题的中的要点之后,git 进阶也就完成了,它包含以下部分: 如何修改 ori ...

  6. git SSH keys

    An SSH key allows you to establish a secure connection between your computer and GitLab. Before gene ...

  7. iOS开发零基础教程之生成git所需的SSH keys

    在我们github看到了一个不错的第三方库时,可能我们想把他git clone到本地,我们需要复制他的SSH URL,如下图: 复制完地址之后,我们需要打开终端,然后输入命令: git clone + ...

  8. windows下git库的ssh连接,使用public key的方法

    在windows下进行项目开发,使用git,通过ssh方式与git库连接,而ssh方式用public key实现连接. 首先需要下载mygit,安装后使用git bash.git bash(有GUI界 ...

  9. git 生成ssh keys

    最近从svn转到gitlab 记录一下如何生成ssh keys 首先下载GitExtensions246SetupComplete.msi并安装,如果已经安装了git,那么安装途中就跳过就行 安装完毕 ...

随机推荐

  1. Oracle通过ROWID删除表中重复记录

    -- 1 通过ROWID删除T1表里重复的记录    SELECT ROWID,A,B--DELETE FROM  T1WHERE ROWID IN (  SELECT RD  FROM  (     ...

  2. linux 安装 SVN server

    安装 使用yum安装非常简单: yum install subversion 配置 2.1. 创建仓库 我们这里在/home下建立一个名为svn的仓库(repository),以后所有代码都放在这个下 ...

  3. 转:win7下git凭据导致无法clone代码

    win7下存在一个凭据管理的情况,如果旧凭据没有删除,用新账户是无法clone代码的. https://blog.csdn.net/qq_34665539/article/details/804082 ...

  4. Flutter的输入框TextField

    TextFiled组件的API 先来看一下TextFiled的构造方法: const TextField({ Key key, this.controller, this.focusNode, thi ...

  5. nodejs 利用zip-local模块压缩文件夹

    var zipper = require("zip-local"); zipper.sync.zip("./folder").compress().save(& ...

  6. centos7根分区扩容(亲测有效)

    root@haojftest:~# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos_test2-root 28G 14G 15G % / devtmpfs ...

  7. vue 響應接口

    全局方式: 增加屬性和set()和get(): vue.set(targname,key,vaule) targname:對象名或者數組名 key:字符串 value:任何值 刪除屬性和set()和g ...

  8. 从身份证号码中获取性别、出生日期、籍贯,并更新mongodb

    有这样的需求,人员信息是存在mongodb中,需要存放人员的身份证.性别.出生日期.籍贯等信息.通过脚本导入这些信息,但是只导入了身份证号码,其他信息空缺.现在需要补全其他信息. 其实身份证信息就包含 ...

  9. AutoCAD Civil 3D多版本插件安装包制作

      程序的主要界面如下: 图1 图2 图3 图4   安装包使用Installshield 2016完成.   其中图3是重点,可以选择需要安装的版本,此功能的实现,主要是依靠Installshiel ...

  10. 动态追加js

    判断是否已引用js,如果没有会引发异常,在异常时添加引用 try { if (layui) {} } catch (ex) { var s = document.createElement('scri ...