3

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

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

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

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

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

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

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

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

4

2 回答 2

8

在包的源代码go.crypto/ssh,我们可以看到支持的密码如下:

  • 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 模式的原因很可能是因为漏洞,正如这个 golang-nuts 线程中所讨论的那样。

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

于 2013-09-25T10:20:27.533 回答
2

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

sshConfig.Config.Ciphers = append(sshConfig.Config.Ciphers, "aes128-cbc")
于 2016-04-21T08:25:05.963 回答