我有一个docker容器,在这个docker容器中我有一段shell脚本,它从私有repo执行git克隆。脚本如下:
eval $(ssh-agent) > /dev/null
# add the ssh key
ssh-add /root/.ssh/id_rsa
kill $SSH_AGENT_PID
git clone ssh://git@bitbucket.org/project/repo.git
但当docker运行时,它会给出一个错误
Cloning into 'repo'...
Host key verification failed.
fatal: Could not read from remote repository.
当我在本地机器上测试时,我可以克隆repo而不会失败,所以我知道我的ssh密钥没有问题。
问题是,当您在本地机器上进行这样的设置时,您可以访问SSH的终端,将密钥添加到known_hosts
请求
The authenticity of host 'server-name (***)' can't be established.
RSA key fingerprint is XXXXXXX.
Are you sure you want to continue connecting (yes/no)?
您基本上可以进行交互,并键入yes
和ssh代理为您添加到known_hosts
的连接。然而,在这种情况下,事情发生在docker容器内,您基本上无法插入此提示。解决方案是将StrictHostKeyChecking no
标志添加到ssh-config中,对于git
命令有几种方法可以做到这一点,您可以在这里查看它们。
因此,基本上,以下是解决这个问题的优雅方法,只需制作.ssh/config
文件并添加我们想要的ssh选项。
eval $(ssh-agent) > /dev/null
# add the ssh key
ssh-add /root/.ssh/id_rsa
kill $SSH_AGENT_PID
echo "Host bitbucket.org" > /root/.ssh/config
echo "User git" >> /root/.ssh/config
echo "IdentityFile /root/.ssh/id_rsa" >> /root/.ssh/config
echo "StrictHostKeyChecking no" >> /root/.ssh/config
git clone ssh://git@bitbucket.org/project/repo.git
StrictHostKeyChecking no
选项只是放弃提示,直接将连接添加到known_hosts
,基本上之后可以git clone
。