解析
我有一个go程序,我需要添加一个ssh密钥。容器启动时SSH代理未运行,因此我一直在尝试弄清楚如何启动它。
无论我尝试什么都会收到 ssh-add 无法连接到代理的错误
os.Mkdir("/root/.ssh", 0700)
privateKeyPath := "/root/.ssh/id_rsa"
err := ioutil.WriteFile(privateKeyPath, []byte(request.Source.GitPrivateKey), 0600)
if err != nil {
log.Panic(err)
}
err = exec.Command("ssh-agent").Run()
if err != nil {
log.Panic(err)
}
err = exec.Command("ssh-add", privateKeyPath).Run()
if err != nil {
log.Panic(err)
}
ssh-add
(以及ssh
和其他人(需要知道如何联系ssh-agent
。
这是通过SSH_AGENT_SOCK
环境变量完成的。
当你运行ssh-agent
时,它会打印出类似于以下内容的内容,通常被评估:
SSH_AUTH_SOCK=/tmp/ssh-OLGZ7hANaDNH/agent.31224; export SSH_AUTH_SOCK;
SSH_AGENT_PID=31225; export SSH_AGENT_PID;
echo Agent pid 31225;
您在这里有两个选择:
解析 SSH_AUTH_SOCK
的值:
然后将其设置为环境变量(例如:使用 os。Setenv(的电话ssh-add
和您进一步的ssh
电话。
或创建自己的临时文件名:
并使用 ssh-agent -a /path/to/my/custom/unix-socket
将其指定为自定义绑定地址,然后将其设置为 SSH_AUTH_SOCK
环境变量。