2 回答

TA贡献1805条经验 获得超10个赞
显然,这是go.mod
文件的问题。两者都已过时golang.org/x/crypto
,golang.org/x/sys
一旦我更新它们,它就开始工作了。感谢@kkleejoe 的帮助。

TA贡献1826条经验 获得超6个赞
假设您可以ssh user@host没有密码,公钥可能是~/.ssh/id_rsa或~/.ssh/id_ecda
import "golang.org/x/crypto/ssh"
import "io/ioutil"
import "strconv"
func DialWithPublickey(addr string, port int, user, publickeyfile string) (*ssh.Client, error) {
key, err := ioutil.ReadFile(publickeyfile)
if err != nil {
return nil, err
}
signer, err := ssh.ParsePrivateKey(key)
if err != nil {
return nil, err
}
client, err := ssh.Dial("tcp", addr+":"+strconv.Itoa(port), &ssh.ClientConfig{
User: user,
Auth: []ssh.AuthMethod{ssh.PublicKeys(signer)},
HostKeyCallback: ssh.HostKeyCallback(func(string, net.Addr, ssh.PublicKey) error { return nil }),
})
if client == nil || err != nil {
return nil, err
}
client.SendRequest(user+"@"+addr, true, nil) // keep alive
return client, nil
}
尝试DialWithPublickey(host, port, user, "~/.ssh/id_rsa")
- 2 回答
- 0 关注
- 1557 浏览
添加回答
举报