使用的操作系统是Ubuntu 18.04 LTS,在工作中经过会碰到一台电脑需要使用多个key来访问多个git仓,或者是多台电脑使用同一个key来访问一个git仓,下面就个人碰到的这个问题做一下记录,供后来的人参考。
1、生成两个站点用的SSH-Key
$ ssh-keygen -t rsa -C "email_1@xxxx.com” -f ~/.ssh/id-rsa
$ ssh-keygen -t rsa -C "email_2@xxxx.com” -f ~/.ssh/github-rsa
此时在~/.ssh 文件夹下应该出现了4个文件:id-rsa、id-rsa.pub、github-rsa、github-rsa.pub
分别将他们的公钥文件(id-rsa.pub,github-rsa.pub)内容配置到对应的git仓上。
2、添加私钥
$ ssh-add ~/.ssh/id-rsa
$ ssh-add ~/.ssh/github-rsa
如果执行ssh-add时提示”Could not open a connection to your authentication agent”,可以现执行命令:
$ ssh-agent bash
# 然后再运行ssh-add命令。
# 可以通过 ssh-add -l 来确私钥列表
$ ssh-add -l
# 可以通过 ssh-add -D 来清空私钥列表
$ ssh-add -D
*如果是与其他电脑使用同一个 ssh key 的话,只需要将私钥文件保存到电脑,然后在step 3中配置相应HostName的IdentityFile。
3、修改配置文件
# 若.ssh目录下无config文件,那么创建
touch config
# 添加以下内容
# gitlab
Host gitlab.com
HostName gitlab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id-rsa
IdentitiesOnly yes
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github-rsa
IdentitiesOnly yes
下面逐行解释:
Host github.com是用来指定该key的Host名字,此处必须使用本地repo的hostname github.com。
Hostname github.com,此处指定Host对应的具体域名,这里跟Host保持一致。(Host跟Hostname可以不一致,但是Host必须跟repo的hostname保持一致,也就是git到时候会用自己repo的hostname来ssh配置文件里面找是不是有对应的Host,找到了就使用该配置,具体访问的域名会采用HostName)
IdentityFile ~/.ssh/id-rsa,这行最为关键,指定了该使用哪个ssh key文件,这里的key文件一定指的是私钥文件。之前我们生成了新的私钥文件~/.ssh/id-rsa。
IdentitiesOnly yes是只接受SSH key 登录。
PreferredAuthentications publickey,PubkeyAuthentication设为no可强制使用密码验证方式登陆。
另外你还可以把AuthenticationMethods设为publickey,password publickey,keyboard-interactive这样你就同时需要私钥和密码才能登录。
4、尝试从现有仓库克隆并进行追踪
git clone --progress -v http://192.168.53.180/XXXXX/XXX.git /var/www/html/
相关主题