[英]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.