我想将一个开放的公共仓库克隆到另一个目录中。要从命令行执行此操作,请键入:
git clone 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.
任何人都可以向我解释这个问题吗?我甚至不明白为什么在回购开放时首先要求公钥。
答案 0 :(得分:3)
如果确实是公开的回购,请使用https而不是ssh:
#!/bin/bash
git clone https://github.com/computersarecool/dotfiles.git documents/gitprojects/dotfiles
如果你想坚持使用ssh,你应该让ssh-agent了解你的id_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
添加您的用户名(并检查〜/ .ssh目录的内容以验证您的私钥名为id_rsa)
答案 1 :(得分:0)
您在评论中提到您将bash脚本作为sudo运行。
我猜你在没有sudo的情况下克隆了命令行。
错误消息Permission denied (publickey).
基本上是说尝试克隆的用户没有正确的ssh公钥。这是因为unix系统上的每个用户通常都有自己的ssh公钥。据推测,您的用户已配置为使用您的公钥对github进行身份验证。但是sudo以用户root
运行。如果您尚未将root的公钥配置为与github帐户(root用户自己的github帐户或您的帐户)一起使用,则认证将失败。
你基本上有2个解决方案:
将您的公钥复制到root的.ssh
目录。不建议这样做!但对于像您自己的笔记本电脑这样的单一用户机器,这样做的安全风险很小。
为root创建公钥并使用github注册。
或者使用https而不是ssh进行克隆(推送会很麻烦,因为它会要求您每次都输入密码)。
另一种选择是克隆为你自己,而不是root。