For some reason Golang SSH client can't connect to my EC2 instance. It throws the following error:
ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain

这是我的代码:

package main

import (
    "fmt"

    "github.com/helloyi/go-sshclient"
)

func main() {
    client, err := sshclient.DialWithKey("ip:port", "ubuntu", "my_key.pem")
    if err != nil {
        fmt.Println(err)
        return
    }

    out, err := client.Cmd("help").Output()
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(string(out))
}

有趣的是,当我在另一台计算机上运行此代码时,连接没有出现任何错误.所以我认为这一定是电脑的问题,而不是我的代码.我还try 使用Paramiko客户端在Python中连接实例,它工作得非常完美.当然,我试着在CMD和MobaXTerm客户端中使用ssh命令进行连接,这两个命令都有效.我try 使用其他Golang SSH客户端golang.org/x/crypto/ssh,但没有成功(相同的错误).

谢谢你的帮助.

推荐答案

显然,这是go.mod个文件的问题.golang.org/x/cryptogolang.org/x/sys都过时了,我一更新就开始工作了.感谢@kkleejoe的帮助.

Go相关问答推荐

Go -SDP服务器读缓冲区不会更改任何内容

如何使用我的 struct 化日志(log)记录格式使人panic ?

如何将GoFr筛选器用于查询参数?

如何使用GO GIN从Auth0 JWT内标识检索权限

Golang使用Run()执行的命令没有返回

调用库和直接操作效率有区别吗?

当我使用 CircleCI 构建 Go Image 时,我得到runtime/cgo: pthread_create failed: Operation not allowed

Golang校验器包:重命名字段错误处理

Golang 中具体类型的错误片段

使用 ssh 从私有 gilab 仓库导入一个 go 项目:未知修订

拆分文本并按空格获取字符串数组,如果文本长度超过 500,则获取字符串数组

如何在时间范围内规范化数组的元素?

GqlGen - 在字段解析器中访问查询输入参数

未定义 protoc protoc-gen-go 时间戳

通用函数与外部包中的常见成员一起处理不同的 struct ?

使用 delve 在容器中调试 Golang:container_linux.go:380:启动容器进程导致:exec:/dlv:stat /dlv:没有这样的文件或目录

Terraform 自定义提供程序 - 数据源架构

为什么 template.ParseFiles() 没有检测到这个错误?

Go:为一组单个结果实现 ManyDecode

AWS EKS 上的 Golang REST API 部署因 CrashLoopBackOff 而失败