【问题标题】:Golang sFTP SSH : Authentification FailedGolang sFTP SSH:身份验证失败
【发布时间】:2017-08-11 20:34:21
【问题描述】:

3 天来,我一直在尝试建立 sFTP 连接以将文件上传到客户端服务器。

我正在使用这个: https://gist.github.com/svett/b7f56afc966a6b6ac2fc

唯一的区别是我添加了:

sshConfig := &ssh.ClientConfig{
    User: "0000003579",
    Auth: []ssh.AuthMethod{
        //SSHAgent(),
        PublicKeyFile("C:\\GoDev\\src\\Texel.ca\\Bnc_Ftp\\.ssh\\id_rsa"),
    },
    HostKeyCallback:   ssh.InsecureIgnoreHostKey(),
    HostKeyAlgorithms: []string{"ssh-dss"},
}
sshConfig.Ciphers = append(sshConfig.Ciphers, "aes128-cbc")

因为我的客户端服务器仍然使用 cbc 并且仍然使用 ssh-dss。

我的问题:

尝试连接时,我收到以下响应:

拨号失败:ssh:握手失败:ssh:无法验证,尝试的方法[无公钥],没有支持的方法保留

我尝试在命令行中通过 openSSH 使用相同的凭据进行连接

ssh -oHostKeyAlgorithms=+ssh-dss ***@2XXX.XXX.XXX.XX -vvv

它有效。

我能否获得有关我的错误的更多信息,例如使用 openSSH 的 -vvv 命令?或者你们有什么想法吗?

谢谢!

编辑

只是为了了解更多信息,现在有一个工作工具可以执行 sftp 传输并且它可以工作。

但它是一个 .bat 文件,这就是我们将其更改为 go 的原因。

它使用 WinSCP 通过 rsa putty 私钥连接到 sFTP。

这可能是问题之一,好像我理解正确,我不能将 puTTy 私钥与 golang ssh 包一起使用。

所以我尝试了 putty 密钥和转换为 openSSH,但都不起作用。

【问题讨论】:

  • 可以查看服务器上的日志吗?似乎是身份验证失败(如果是 HostKeyAlgorithm 或 Ciphers 列表,您会收到“无通用算法”错误)
  • 很遗憾,我无法访问服务器。他们的服务真的很慢,试图让他们检查一些东西需要几周的时间。我不能在客户端获取日志吗?就像终端中的 openSSH 一样,我作为客户端似乎有更多信息。
  • 您使用的链接示例是否与所写的完全一致?它默默地吞下错误,所以我会先修复那里的代码并添加一些日志记录。否则,您可以进入 ssh 包并将 debugHandshake 更改为 true 以获取更多信息,或者开始添加您自己的调试日志记录。
  • 我不知道你能做到,我会试试的。我也尝试在 ssh 包中手动调试它。我在confirmKeyAck函数中一直到client_auth,这里函数readPacket数据。它检测到 msgUserAuthFailure,但我似乎无法读取其中的任何内容。我试图用 Unmarshal(packet, &msg); 解组它。但是当我打印 msg 时,我得到一个 nil 值。我是 GO 新手,所以我可能不会做对。

标签: go


【解决方案1】:

使用 openssh,您将添加 dss 到算法中,并且使用未知密钥。此密钥将是您的用户默认密钥,可能不是您在旅途中使用的密钥?

在 Go 方面,您只使用 dss 算法和 rsa 密钥,这可能是问题所在?

确保您在两种情况下都使用相同的密钥和相同的算法,并且算法与密钥匹配。

如果仍然卡住,可能会发布 -vvv 的完整输出和 all 错误。

【讨论】:

  • 我的SSH知识有点欠缺。 :) 我之前尝试过不使用 HostKeyAlgorithms,但它无法正常工作。我将添加一个编辑以获取有关主要帖子的更多信息。请参阅有关私钥的编辑。另外,我可以使用 -vvv 在运行端输出错误吗?
  • 我可能错了,但我会怀疑钥匙。当您要求它使用 dss(dsa 密钥)但使用 rsa 密钥时,我看不出它是如何工作的。您应该使用您在此处通过 -i 选项指定的密钥尝试 openssh,以便确定您正在测试相同的密钥,或者在运行端尝试不同的 dsa 密钥(如果您说服务器仅使用 dss) .在 go side no -vvv 不会做任何事情,请按照上面来自 jimb 的说明进行操作。
  • 还可以尝试仅使用 ssh-dss 的 openssl,看看您的假设是否正确,这应该是使用的算法。
猜你喜欢
  • 1970-01-01
  • 2014-05-20
  • 2017-01-03
  • 1970-01-01
  • 2015-02-01
  • 2018-07-12
  • 1970-01-01
  • 2016-04-03
  • 2018-09-22
相关资源
最近更新 更多