Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 为什么我可以从命令行克隆而不是从bash脚本克隆?_Git_Bash_Github - Fatal编程技术网

Git 为什么我可以从命令行克隆而不是从bash脚本克隆?

Git 为什么我可以从命令行克隆而不是从bash脚本克隆?,git,bash,github,Git,Bash,Github,我想将一个开放的公共回购克隆到另一个目录中。要从命令行执行此操作,请键入: git克隆git@github.com:computersarecool/dotfiles.git documents/gitprojects/dotfiles 这很有效 但是,现在我想从bash脚本中执行它。在脚本中,我有完全相同的代码: #!/bin/bash git clone git@github.com:computersarecool/dotfiles.git documents/gitprojects/do

我想将一个开放的公共回购克隆到另一个目录中。要从命令行执行此操作,请键入:


git克隆git@github.com:computersarecool/dotfiles.git documents/gitprojects/dotfiles

这很有效

但是,现在我想从
bash
脚本中执行它。在脚本中,我有完全相同的代码:

#!/bin/bash
git clone git@github.com:computersarecool/dotfiles.git documents/gitprojects/dotfiles
但现在我得到一个错误:

Permission denied (publickey).                                            
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.

谁能给我解释一下这个问题吗?我甚至不明白,既然回购协议是开放的,为什么它首先要求公开密钥。

如果它确实是公开的开放式回购协议,请使用https而不是ssh:

#!/bin/bash
git clone https://github.com/computersarecool/dotfiles.git documents/gitprojects/dotfiles
如果您想坚持使用ssh,应该让ssh代理知道您的id\u rsa密钥:

#!/bin/bash
eval `ssh-agent -s`
ssh-add /home/<Your username>/.ssh/id_rsa
git clone git@github.com:computersarecool/dotfiles.git documents/gitprojects/dotfiles
#/bin/bash
eval`ssh代理-s`
ssh add/home/.ssh/id\u rsa
git克隆git@github.com:computersarecool/dotfiles.git documents/gitprojects/dotfiles

添加您的用户名(并检查~/.ssh目录的内容以验证您的私钥名为id_rsa)

您在评论中提到您以sudo的身份运行bash脚本

我猜你是在命令行中克隆的,没有sudo

错误消息
Permission denied(publickey)。
基本上是说试图克隆的用户没有正确的ssh公钥。这是因为unix系统上的每个用户通常都有自己的ssh公钥。您的用户可能已配置为使用您的公钥通过github进行身份验证。但是sudo以用户
root
的身份运行。如果您尚未将root的公钥配置为与github帐户(root自己的github帐户或您的github帐户)一起使用,那么它将无法通过身份验证

您基本上有两种解决方案:

  • 将公钥复制到root的
    .ssh
    目录。这是不推荐的!但是对于像你自己的笔记本电脑这样的单用户机器,这样做的安全风险是最小的

  • 为root用户创建公钥并向github注册

  • 或者使用https而不是ssh进行克隆(推送会很痛苦,因为每次都需要输入密码)


    还有另一种选择是克隆为您自己,而不是根用户。

    您是使用
    sudo
    还是作为其他用户,还是从
    cron
    或类似的用户执行此操作?我正在以
    sudo
    的身份运行bash脚本!有没有办法解释这个问题?
    git克隆git@github.com:…
    正在通过SSH进行连接。它必须先向远程SSH守护进程进行身份验证,然后才能与任何特定于git的内容进行通信,因此,repo是否经过身份验证完全无关:它在失败时还没有完成传输层协商和身份验证,因此,是否存在任何类型的应用层访问控制是没有意义的。是否有理由使用sudo来克隆它?您在这里提到了
    公钥
    ,但我假设根用户将需要正确的公钥和私钥?是的,这就是密钥对的工作方式。但是,千万不要将私钥公开给任何其他人……re:“推送会很痛苦”——没有义务通过克隆的URL推送。在第二个代码片段中,您仍然使用
    https://
    ,这使得SSH密钥设置相当没有意义。