是否可以将ssh密钥设置为在git命令的go程序中工作?
我无法从Go的exec.Command运行git pull--tags,因为我没有访问权限 代码是否可以将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)
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是否发布您的答案,很好你让它工作了。