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帐户)一起使用,那么它将无法通过身份验证
您基本上有两种解决方案:
.ssh
目录。这是不推荐的!但是对于像你自己的笔记本电脑这样的单用户机器,这样做的安全风险是最小的还有另一种选择是克隆为您自己,而不是根用户。您是使用
sudo
还是作为其他用户,还是从cron
或类似的用户执行此操作?我正在以sudo
的身份运行bash脚本!有没有办法解释这个问题?git克隆git@github.com:…
正在通过SSH进行连接。它必须先向远程SSH守护进程进行身份验证,然后才能与任何特定于git的内容进行通信,因此,repo是否经过身份验证完全无关:它在失败时还没有完成传输层协商和身份验证,因此,是否存在任何类型的应用层访问控制是没有意义的。是否有理由使用sudo来克隆它?您在这里提到了公钥
,但我假设根用户将需要正确的公钥和私钥?是的,这就是密钥对的工作方式。但是,千万不要将私钥公开给任何其他人……re:“推送会很痛苦”——没有义务通过克隆的URL推送。在第二个代码片段中,您仍然使用https://
,这使得SSH密钥设置相当没有意义。