关于git的ssh-key:解决本地多个ssh-key的问题

在设置github的时候,官方的说明文档要求备份当前的id_rsa,然后生成一份新的私钥用于github的登陆。如果真这样做,那么新的私钥是无法再继续登陆之前的机器的。这种方法有点暴力…
还好ssh可以让我们通过不同的私钥来登陆不同的域。

首先,在新增私钥的时候,通过指定不同的文件名来生成不同的私钥文件

ssh-keygen -t rsa -f ~/.ssh/id_rsa.work -C "Key for Work"

ssh-keygen -t rsa -f ~/.ssh/id_rsa.github -C "Key for GitHub"


新增ssh的配置文件,并修改权限

touch ~/.ssh/config

chmod 600 ~/.ssh/config


修改config文件的内容

Host *.workdomain.com

    IdentityFile ~/.ssh/id_rsa.work
    User lee
 
Host github.com
    IdentityFile ~/.ssh/id_rsa.github
    User git

这样在登陆的时候,ssh会根据登陆不同的域来读取相应的私钥文件

ssh -T [email protected]

如果想要使用同一台电脑访问github中两个或多个仓库,原理类似:

1.在终端中输入以下命令,查看密钥。

ls ~/.ssh

如果有 id_rsaid_rsa.pub,说明已存在一对密钥/公钥。

2.创建新的 密钥/公钥,并指定密钥名称,比如id_rsa_x(x为任意名称)

ssh-keygen -t rsa -f ~/.ssh/id_rsa_x -C "[email protected]"

操作完成后,该目录会多出 id_rsa_xid_rsa_x.pub 两个文件。

3.在 ~/.ssh/ 文件夹下创建一个 config 文件

$ touch config
$ vim config

编辑config文件,配置不同的仓库指向不同的密钥文件。

# 第一个账号,默认使用的账号
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
# 第二个账号
Host second.github.com  # second为前缀名,可以任意设置
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_x

原理分析
1.ssh 客户端是通过类似 [email protected]:githubUserName/repName.git ** 的地址来识别使用本地的哪个私钥的,地址中的 User 是@前面的git, Host 是@后面的github.com
2.如果所有账号的 User 和 Host 都为 git 和 github.com,那么就只能使用一个私钥。所以要对User 和 Host 进行配置,让每个账号使用自己的 Host,每个 Host 的域名做 CNAME 解析到 github.com,如上面配置中的Host second.github.com
3.配置了别名之后,新的地址就是
[email protected]:githubUserName/repName.git**(在添加远程仓库时使用)。
这样 ssh 在连接时就可以区别不同的账号了。

4.查看SSH 密钥的值,分别添加到对应的 GitHub 账户中

$ cat id_rsa.pub
$ cat id_rsa_x.pub

把这两个值分别 copy 到 GitHub 账号中的 SSH keys 中保存。

5.清空本地的 SSH 缓存,添加新的 SSH 密钥 到 SSH agent中

$ ssh-add -D
$ ssh-add id_rsa
$ ssh-add id_rsa_x

最后确认一下新密钥已经添加成功

$ ssh-add -l

6.测试 ssh 链接

ssh -T [email protected]
ssh -T [email protected]
# xxx! You’ve successfully authenticated, but GitHub does not provide bash access.
# 出现上述提示,连接成功

7.取消 git 全局用户名/邮箱的设置,设置独立的 用户名/邮箱

# 取消全局 用户名/邮箱 配置
$ git config --global --unset user.name
$ git config --global --unset user.email
# 进入项目文件夹,单独设置每个repo 用户名/邮箱
$ git config user.email "[email protected]"
$ git config user.name "xxxx"

查看git项目的配置

git config --list

8.命令行进入项目目录,重建 origin (whatever 为相应项目地址)

$ git remote rm origin
# 远程仓库地址,注意Host名称
$ git remote add origin [email protected]:githubUserName/repName.git
$ git remote -v # 查看远程

10.远程 push 测试
首先在 GitHub 上新建一个名为 testProj 的远程仓库,然后再在本地建一个本地仓库。

$ cd ~/documnts
$ mkdir testProj

1.进入 testProj 文件夹,创建 REDME.md文件
2.初始化此文件夹为git
3.添加并提交README.md到Git本地仓库
4.添加远程仓库
5.把README.md推送到远程仓库

$ cd testProj
$ echo "# ludilala.github.io" >> README.md
$ git init
$ git add README.md
$ git commit -m "first commit"
# 如果前面已添加远程连接,就无需再次添加
$ git remote add origin https://github.com/ludilalaa/ludilala.github.io.git
$ git push -u origin master

你可能感兴趣的:(git工具问题汇总)