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

时间:2016-08-01 19:36:38

标签: git bash github

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

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.

任何人都可以向我解释这个问题吗?我甚至不明白为什么在回购开放时首先要求公钥。

2 个答案:

答案 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个解决方案:

  1. 将您的公钥复制到root的.ssh目录。不建议这样做!但对于像您自己的笔记本电脑这样的单一用户机器,这样做的安全风险很小。

  2. 为root创建公钥并使用github注册。

  3. 或者使用https而不是ssh进行克隆(推送会很麻烦,因为它会要求您每次都输入密码)。

    另一种选择是克隆为你自己,而不是root。