部署使用的ssh key

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_rsaid_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来使用指定私钥

上述思路中使用了多个密钥对来针对不同域名区别使用密钥,在我们这个案例中,域名是不变的,单是我们也需要使用不同的私钥。

可以参考 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来使用指定私钥

参考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 example

Last updated