[英]cmd := exec.Command("ssh", "ec2-user@publicip") exits with Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
我正在使用 org/x/crypto/ssh 包来构建一个 cli 应用程序,以使用 ssh 证书通过堡垒 ssh 到服务器。 基本工作流程是; cli 工具获取用户公钥并从 vault ssh ca 对其进行签名,并且生成的证书用于向服务器验证用户身份。 它工作得很好。
configure := &ssh.ClientConfig{
User: "ec2-user",
Auth: []ssh.AuthMethod{
// Use the PublicKeys method for remote authentication.
ssh.PublicKeys(certSigner),
},
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
}
//log.Println(config.bastionserver.publicIP)
// Connect to the remote server and perform the SSH handshake.
proxyClient, err := ssh.Dial("tcp", net.JoinHostPort(config.bastion.publicIP, "22"), configure)
if err != nil {
log.Fatalln(err)
}
session, err := proxyClient.NewSession()
if err != nil {
log.Fatalln(err)
}
defer session.Close()
if err = session.Shell(); err != nil {
log.Fatalln(err)
}
session.Wait()
我做了一些更改并恢复到代码,我开始收到以下错误。 我用git来恢复。
ssh:握手失败:ssh:无法验证,尝试的方法 [publickey none],没有支持的方法
所以我降低了复杂性并尝试了以下块来尝试通过我正在构建的 cli 应用程序连接到堡垒。
cmd := exec.Command("ssh", "-i", signedKeyPath, "-i", privateKeyPath, "ec2-user@host")
fmt.Println(cmd.String())
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
if err != nil {
log.Fatalln(err)
}
它仍然退出
/usr/bin/ssh -i /home/rochana/.ssh/id_rsa-cert.pub -i /home/rochana/.ssh/id_rsa ec2-user@host ec2-user@host: 权限被拒绝 (publickey,gssapi- keyex,gssapi-with-mic)。 2020-02-17 11:01:25.168548 退出状态 255。
我尝试在不同的 PC 上编译和运行它,但得到了相同的结果。 我尝试将证书保存到磁盘并给出路径。
但是如果我在终端上运行相同的命令。 它工作正常并连接到实例。
ssh -i ~/.ssh/id_rsa-cert.pub -i ~/.ssh/id_rsa ec2-user@host
或者只是复制并粘贴 cmd.String() 输出
/usr/bin/ssh -i /home/rochana/.ssh/id_rsa-cert.pub -i /home/rochana/.ssh/id_rsa ec2-user@host
当我直接在终端上运行但不使用 exec 命令时,一切正常
错误是由于 Vault 服务器无法同步其时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.