尝试通过 SSH 连接到远程主机时出错

hap*_*her 5 encryption ssh go

我正在尝试连接到远程主机以发出命令,但在运行代码时收到以下错误消息:

\n\n
\n

ssh:握手失败:ssh:没有通用的密钥交换算法;客户端提供:[curve25519-sha256@libssh.org ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 diffie-hellman-group14-sha1],服务器提供:[diffie-hellman-group1-sha1]恐慌:运行时错误:无效的内存地址或零指针取消引用\n [信号 SIGSEGV:分段违规代码 = 0x1 addr = 0x10 pc = 0x759836]

\n
\n\n

这是我正在使用的代码:

\n\n
func\xc2\xa0(SSHClient\xc2\xa0*SSH)\xc2\xa0Connect(mode\xc2\xa0int)\xc2\xa0{\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0var\xc2\xa0SSHConfig\xc2\xa0*ssh.ClientConfig\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0var\xc2\xa0auth\xc2\xa0[]ssh.AuthMethod\n\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0if\xc2\xa0mode\xc2\xa0==\xc2\xa0CERT_PUBLIC_KEY_FILE\xc2\xa0{\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0auth\xc2\xa0=\xc2\xa0[]ssh.AuthMethod{SSHClient.readPublicKeyFile(SSHClient.Cert)}\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}\n\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0SSHConfig\xc2\xa0=\xc2\xa0&ssh.ClientConfig{\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0User:\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0SSHClient.User,\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0Auth:\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0auth,\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0HostKeyCallback:\xc2\xa0ssh.InsecureIgnoreHostKey(),\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0Timeout:\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0time.Second\xc2\xa0*\xc2\xa0DEFAULT_TIMEOUT,\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}\n\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0SSHConfig.Config.Ciphers\xc2\xa0=\xc2\xa0append(SSHConfig.Config.Ciphers,\xc2\xa0"diffie-hellman-group1-sha1")\n\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0client,\xc2\xa0err\xc2\xa0:=\xc2\xa0ssh.Dial("tcp",\xc2\xa0fmt.Sprintf("%s:%d",\xc2\xa0SSHClient.IP,\xc2\xa0SSHClient.Port),\xc2\xa0SSHConfig)\n\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0if\xc2\xa0err\xc2\xa0!=\xc2\xa0nil\xc2\xa0{\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0fmt.Printf("ERROR\xc2\xa0-\xc2\xa0While\xc2\xa0trying\xc2\xa0to\xc2\xa0Dial\xc2\xa0to\xc2\xa0the\xc2\xa0host\xc2\xa0%s\xc2\xa0with\xc2\xa0error:\xc2\xa0%s",\xc2\xa0SSHClient.IP,\xc2\xa0err.Error())\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0return\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}\n\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0session,\xc2\xa0err\xc2\xa0:=\xc2\xa0client.NewSession()\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0if\xc2\xa0err\xc2\xa0!=\xc2\xa0nil\xc2\xa0{\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0fmt.Printf("ERROR\xc2\xa0-\xc2\xa0While\xc2\xa0trying\xc2\xa0to\xc2\xa0create\xc2\xa0a\xc2\xa0new\xc2\xa0session\xc2\xa0on\xc2\xa0host\xc2\xa0%s\xc2\xa0with\xc2\xa0error:\xc2\xa0%s",\xc2\xa0SSHClient.IP,\xc2\xa0err.Error())\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0client.Close()\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0return\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}\n\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0SSHClient.session\xc2\xa0=\xc2\xa0session\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0SSHClient.client\xc2\xa0=\xc2\xa0client\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

关于如何解决这个问题有什么想法吗?

\n\n

提前致谢。

\n

Von*_*onC 4

问题是......服务器只愿意通过 diffie-hellman-group1-sha1 进行对话

和:

因此,您的客户端需要一个 的分支 golang.org/x/crypto/ssh,例如Bored-engineer/ssh,其中提交 39a91b提交 fe5e4ff确实添加了对 diffie-hellman-group1-sha1 的支持。
或者安装最新的golang/crypto,其中包括提交 57b3e21