【问题标题】:Failed to dial: handshake failed: ssh: no common algorithms Error in ssh client for golang拨号失败:握手失败:ssh:没有通用算法 Golang 的 ssh 客户端出错
【发布时间】:2021-07-28 01:33:01
【问题描述】:

我正在使用goftp 上传到服务器的项目,但是(感谢这里的好心人)我将使用更安全的方法。

我打算改用 ssh 并在 golang 中找到了这个 ssh 客户端,找到了 here

我已经设置了一个 ssh 服务器 (freeSSHd),并且可以在本地和另一台机器上通过 PuTTY 成功连接。

我只更改了客户端的这一部分,用我自己的变量替换了变量

var (
    server = "127.0.0.1:22"
    username = "username"
    password = clientPassword("password")
)

当我执行 ssh 客户端时,ssh.Dial 返回一个错误,并且 panic 显示如下: “拨号失败:握手失败:ssh:没有通用算法”

client, err := ssh.Dial("tcp", "127.0.0.1:22", config)
if err != nil {
    panic("Failed to dial: " + err.Error())
}

我是 golang 的新手,所以如果能帮助我指出正确的方向,我将不胜感激。提前致谢。

【问题讨论】:

标签: ssh go


【解决方案1】:

go.crypto/ssh 包的source code 中,我们可以看到支持的密码如下:

  • aes128-ctr
  • aes192-ctr
  • aes256-ctr
  • arcfour128
  • arcfour256

虽然 freeSSHd 支持:

  • aes128-cbc
  • aes192-cbc
  • aes256-cbc
  • 3des-cbc
  • 河豚-cbc
  • rijndael128-cbc
  • rijndael192-cbc
  • rijndael256-cbc
  • rijndael-cbc@lysator.liu.se

因为客户端和服务器没有共享密码,你会得到错误信息。 ssh 包中不支持 CBC 模式的原因很可能是因为 vulnerability,正如 this golang-nuts 线程中所讨论的那样。

解决您的问题的方法可能是尝试安装不同的 SSH 服务器,例如 OpenSSH for Windows

【讨论】:

  • 太棒了!我将尝试适用于 Windows 的 OpenSSH。
【解决方案2】:

虽然它是不安全的,但您可以让 go 的库使用 freeSSH 支持的密码。

sshConfig.Config.Ciphers = append(sshConfig.Config.Ciphers, "aes128-cbc")

【讨论】:

    猜你喜欢
    • 2021-02-25
    • 2015-12-08
    • 2020-02-14
    • 2016-11-19
    • 2016-01-18
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 2021-02-22
    相关资源
    最近更新 更多