我正在开发一个使用 goftp 上传到服务器的项目,但是(感谢这里的好心人)我将使用更安全的方法。
我打算改用 ssh,并在 golang 中找到了这个 ssh 客户端。
我已经设置了一个ssh服务器(freeSSHd),并且可以在本地和另一台机器上通过PuTTY成功连接。
我只更改了客户端的这一部分,以用我自己的变量替换变量
var (
server = "127.0.0.1:22"
username = "username"
password = clientPassword("password")
)
当我执行 ssh 客户端时,ssh。拨号返回错误,死机显示以下内容:"拨号失败:握手失败:ssh:无通用算法"
client, err := ssh.Dial("tcp", "127.0.0.1:22", config)
if err != nil {
panic("Failed to dial: " + err.Error())
}
我是golang的新手,所以我希望能帮助我指出正确的方向。提前谢谢。
在 go.crypto/ssh
包的源代码中,我们可以看到支持的密码如下:
- AES128-CTR
- AES192-CTR
- AES256-CTR
- 弧形128
- 弧形福尔256
虽然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服务器,例如Windows的OpenSSH。
虽然它不安全,但你可以让go的库使用freeSSH支持的密码。
sshConfig.Config.Ciphers = append(sshConfig.Config.Ciphers, "aes128-cbc")