部署使用的ssh key
Key has already been taken
Key has already been taken在使用git clone命令部署gitlab的托管项目文件时,需要首先在项目配置中添加deploy key,但是也可能会遇到下列报错
Key has already been taken
Fingerprint has already been taken这个问题是因为gitlab中已经有其他项目使用了这个部署公钥,所以无法添加到当前项目。
多个ssh密钥对的思路
Managing Multiple SSH Keys提供了一种解决思路,即如果需要对不同的git仓库使用不同的ssh key时候,可以先创建不同的密钥对:
mkdir ~/.ssh/fedoraproject
cd ~/.ssh/fedoraproject
ssh-keygen -f id_rsa这样就可以在~/.ssh/fedoraproject目录下创建独立的id_rsa和id_rsa.pub密钥对。
然后配置类似如下
Host github.com
User git
Hostname github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/git/id_rsa
Host fedoraproject.org
Hostname fedoraproject.org
PreferredAuthentications publickey
IdentityFile ~/.ssh/fedoraproject/id_rsa
Host fedorapeople.org
Hostname fedorapeople.org
PreferredAuthentications publickey
IdentityFile ~/.ssh/fedoraproject/id_rsa再使用 git clone git@fedoraproject.org:example/example_repo.git 就可以使用指定的密钥来完成。
结合ssh-agent来使用指定私钥
ssh-agent来使用指定私钥上述思路中使用了多个密钥对来针对不同域名区别使用密钥,在我们这个案例中,域名是不变的,单是我们也需要使用不同的私钥。
可以参考 Specify private SSH-key to use when executing shell command with or without Ruby? 使用以下命令
ssh-agent bash -c 'ssh-add /home/christoffer/ssh_keys/theuser; git clone git@github.com:TheUser/TheProject.git'此方法测试可用于
git 1.9,上述方法解决了对特定项目使用指定密钥对的问题。
另一个建议方法测试没有成功:
ssh-agent $(ssh-add /home/christoffer/ssh_keys/theuser; git clone git@github.com:TheUser/TheProject.git)使用git的GIT_SSH_COMMAND来使用指定私钥
GIT_SSH_COMMAND来使用指定私钥参考How to tell git which private key to use?,即从git 2.3.0开始可以指定环境变量
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example" git clone example这里-i也可能被配置文件覆盖,所以可以给予SSH一个空白配置
GIT_SSH_COMMAND环境变量对于低于git 2.3.0版本无效
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example -F /dev/null" git clone exampleLast updated
Was this helpful?