是否可以将ssh密钥设置为在git命令的go程序中工作?

是否可以将ssh密钥设置为在git命令的go程序中工作?,git,go,ssh,Git,Go,Ssh,我无法从Go的exec.Command运行git pull--tags,因为我没有访问权限 代码 func SimpleCommand(start string, args ...string) (result string) { cmd := exec.Command(start, args...) //cmd.Dir = dir bytes, err := cmd.Output() if err != nil { fmt.Print(err)

我无法从Go的exec.Command运行git pull--tags,因为我没有访问权限

代码

func SimpleCommand(start string, args ...string) (result string) {
    cmd := exec.Command(start, args...)

    //cmd.Dir = dir
    bytes, err := cmd.Output()
    if err != nil {
        fmt.Print(err)
    }
    s := string(bytes)

    return s

}
func main() {
    SimpleCommand("git", "pull", "--tags")


}
通常,当我运行git命令时,我是在git bash中手动执行的,我有如下的.bashrc文件设置

 eval $(ssh-agent -s) 
 ssh-add c:/sshkeys/id_rsa 
 ssh-add c:/sshkeys/github
这很好,但当我在Go程序中运行git命令时,它显然不运行这些命令。所以我得到以下错误

git@gitlab.com:权限被拒绝(公钥)。致命:无法读取 来自远程存储库

请确保您拥有正确的访问权限和存储库 存在

我曾尝试使用SimpleCommand函数单独运行这些命令,但它找不到eval命令(它似乎不是可执行文件)


我也觉得应该有更好的方法来做到这一点,我没有办法让go程序以这样的方式管理ssh密钥,它将能够在运行git命令时使用它们。

没有意识到core.sshCommand,这对我来说现在起作用了

将当前repo设置为在特定位置使用ssh密钥

设置功能

func SetupGitSsh() {
    sshKeysDir := "c:/sshkeys/id_rsa"
    sshloc := fmt.Sprintf("ssh -i %s", sshKeysDir)
    DirCommand("git", "c:\\DEV\\outsideprj", "config", "core.sshCommand", sshloc)
}
func DirCommand(app string, dir string, args ...string) {

    cmd := exec.Command(app, args...)
    cmd.Dir = dir
    stdout, err := cmd.Output()

    if err != nil {
        fmt.Println(err.Error())
        return
    }

    fmt.Print(string(stdout))
}
指令功能

func SetupGitSsh() {
    sshKeysDir := "c:/sshkeys/id_rsa"
    sshloc := fmt.Sprintf("ssh -i %s", sshKeysDir)
    DirCommand("git", "c:\\DEV\\outsideprj", "config", "core.sshCommand", sshloc)
}
func DirCommand(app string, dir string, args ...string) {

    cmd := exec.Command(app, args...)
    cmd.Dir = dir
    stdout, err := cmd.Output()

    if err != nil {
        fmt.Println(err.Error())
        return
    }

    fmt.Print(string(stdout))
}

Go不会在bash shell中运行命令。相反,请尝试设置
core.sshCommand
。例如
git config core.sshCommand“ssh-ic:/sshkeys/id\u rsa-is:/sshkeys/github”
。这是很有用的,因为git配置设置可以是全局的,也可以是本地的。请参阅此答案以了解解决方法的各种线索@Mark我昨晚进行了更深入的研究,发现了core.sshCommand,并最终使其正常工作。我们打算发布更多答案,但如果您想继续?@user3755946是否发布您的答案,很好你让它工作了。