不能通过添加ssh来克隆克隆

  # Write the SSH-KEY to the disk
  fs.writeFile "/cgrepos/.ssh/#{repo.id}.pub", repo.public_key, (err) ->
    throw err if err

    fs.writeFile "/cgrepos/.ssh/#{repo.id}", repo.private_key, (err) ->
      throw err if err

      exec "chmod 400 /cgrepos/.ssh/#{repo.id} && eval `ssh-agent -s` && ssh-add /cgrepos/.ssh/#{repo.id}", (error) ->
        throw error if error
        # First, delete the git repo on the hard drive, if it exists
        exec "rm -rf #{git_location}", options, (error) ->
          throw error if error
          # Second, clone the repo into the location
          console.log "Cloning repo #{repo.id}: #{repo.repo_name} into #{git_location}. This could take a minute"
          exec "git clone #{repo.url} #{git_location}", options, (error) ->
            throw error if error

我试图在节点(使用coffee的那些真棒)。 但出于某种原因,它运行时会给我一个错误: Error: Command failed: conq: repository access denied. deployment key is not associated with the requested repository. Error: Command failed: conq: repository access denied. deployment key is not associated with the requested repository.

不知道我做错了什么。 如果我直接从命令行运行这些命令,一切似乎都可以正常工作。 有任何想法吗?


当你尝试从node.js执行git clone进程时,它运行在不同的环境中。

当你在被保护的(在ssh协议上)存储库上使用git clone时, ssh-agent首先尝试用提供的公钥来验证你。 由于exec为每次调用使用不同的运行时环境,即使您明确添加了您的私钥,由于不同的运行时环境也无法运行。

在ssh中进行身份验证时,git clone会查找SSH_AUTH_SOCK 。 通常,这个env变量具有密码密钥环服务的路径,如(gnome-keyring或kde-wallet)。

试试这个先检查一下。

env | grep -i ssh

它应该列出SSH_AGENT_PID和SSH_AUTH_SOCK。 问题是,当运行git clone这些环境变量没有设置。 所以你可以设置它们(只是SSH_AUTH_SOCK就足够了)作为exec函数调用的选项。 在这里看看如何将env密钥对传递给exec。

var exec = require('child_process').exec,
    child;

child = exec('git clone cloneurl', {
  cwd: cwdhere,      // working dir path for git clone
  env: {
           envVar1: envVarValue1,
           SSH_AUTH_SOCK: socketPathHere
       } 
}, callback);

如果这不起作用,请尝试在exec函数中执行ssh -vvv user@git-repo-host 。 看到这个过程的输出,你会发现错误。

如果错误说debug1: No more authentication methods to try. Permission denied (publickey). debug1: No more authentication methods to try. Permission denied (publickey). ,然后像这样将主机别名添加到$ HOME / .ssh / config文件。

Host hostalias
 Hostname git-repo-host
 IdentityFile ~/.ssh/your_private_key_path

这将使用提供的私钥对所有认证请求发送到指定的主机。 在此选项中,您还可以更改origin's URL以使用上述文件中配置的hostalias。 reporoot/.git/config文件将如下所示。

[remote "origin"]
    url = user@hostalias:repo.git
链接地址: http://www.djcxy.com/p/70191.html

上一篇: Can't git clone by adding ssh

下一篇: YotubePlayerSupportFragment full screen view in landscape mode