不能通过添加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