Docker + SSH + Git克隆问题

我已经阅读了很多关于今晚同样的事情的问题,但是如果有任何解决scheme真正起作用的话,我会被诅咒的。

简而言之,我需要将托pipe在GitHub上的私有Git仓库复制到我的Docker镜像中。

这是我到目前为止在Dockerfile中的:

FROM debian:wheezy ENV DEBIAN_FRONTEND noninteractive # Update aptitude with new repo RUN apt-get update # Install software RUN apt-get install -y \ # All of my packages here... # Make ssh dir RUN mkdir /root/.ssh/ # Copy over private key, and set permissions ADD ssh/id_rsa /root/.ssh/id_rsa RUN chmod 700 /root/.ssh/id_rsa RUN touch /root/.ssh/known_hosts # Add GithHubs key RUN ssh-keyscan -T 60 github.com >> /root/.ssh/known_hosts # Create the Development directory and then move into the directory. RUN mkdir -p /var/www/dev WORKDIR /var/www/dev # Start-up Git and pull in the Dev branch. RUN ssh -v git@github.com #RUN git init #RUN git remote add origin git@github.com:<my_git_repo> #RUN git fetch #RUN git checkout -t origin/dev #RUN git clone git@github.com:<my_git_repo> 

ssh -v给我下面的debugging日志:

 OpenSSH_6.0p1 Debian-4+deb7u4, OpenSSL 1.0.1e 11 Feb 2013 Pseudo-terminal will not be allocated because stdin is not a terminal. debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1: Connecting to github.com [192.30.252.131] port 22. debug1: Connection established. debug1: permanently_set_uid: 0/0 debug1: identity file /root/.ssh/id_rsa type -1 debug1: identity file /root/.ssh/id_rsa-cert type -1 debug1: identity file /root/.ssh/id_dsa type -1 debug1: identity file /root/.ssh/id_dsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa type -1 debug1: identity file /root/.ssh/id_ecdsa-cert type -1 debug1: Remote protocol version 2.0, remote software version libssh-0.7.0 debug1: no match: libssh-0.7.0 debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u4 debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: server->client aes128-ctr hmac-sha1 none debug1: kex: client->server aes128-ctr hmac-sha1 none debug1: sending SSH2_MSG_KEX_ECDH_INIT debug1: expecting SSH2_MSG_KEX_ECDH_REPLY debug1: Server host key: RSA 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48 debug1: Host 'github.com' is known and matches the RSA host key. debug1: Found key in /root/.ssh/known_hosts:1 Warning: Permanently added the RSA host key for IP address '192.30.252.131' to the list of known hosts. debug1: ssh_rsa_verify: signature correct debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug1: SSH2_MSG_NEWKEYS received debug1: SSH2_MSG_SERVICE_REQUEST sent debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: Authentications that can continue: publickey debug1: Next authentication method: publickey debug1: Trying private key: /root/.ssh/id_rsa debug1: key_parse_private_pem: PEM_read_PrivateKey failed debug1: read PEM private key done: type <unknown> debug1: read_passphrase: can't open /dev/tty: No such device or address debug1: Trying private key: /root/.ssh/id_dsa debug1: Trying private key: /root/.ssh/id_ecdsa debug1: No more authentication methods to try. Permission denied (publickey). 

我试过把StrictHostChecking设置为no的选项。 我已经尝试在SSH目录下单独的configuration文件来指定主机,端口,身份文件(是私钥,而不是公共的)。

我在这里错过了什么? 创build的虚拟机上的密钥与我在本地计算机上的密钥完全相同。

使用GitHub个人访问令牌代替ssh密钥可能会更好。

https://help.github.com/articles/creating-an-access-token-for-command-line-use/

这消除了你需要把你的SSH密钥烧入图像,这是更安全的,它允许通过https克隆,这应该简化你的dockerfile。 如果你需要撤销令牌,那么从他们的网站很容易就可以做到,而且你不需要在任何地方更换你的私人密钥。

如果你看了这个,不能使用这个选项,让我知道,我可以帮你找出ssh的关键问题。

其中一个问题可能是.ssh/config文件需要具有特定的权限。 尝试使用权限600 ie rw- --- ---而不是700 ie rwx --- ---

提示进行debugging

您可以尝试在容器内执行以下操作,以确保安装程序正常工作:

 ssh -T git@github.com 

如果一切安装正确,你应该看到:

 Hi username! You've successfully authenticated, but GitHub does not provide shell access. 

克隆私人存储库的替代策略

当在docker中克隆私有仓库时,我通过安装相关的套接字来使用容器内的本地主机上的ssh代理会话。 详情可以在这里find: https : //ahmadnazir.github.io/posts/2016-06-24-accessing-private-repos-in-docker.html