【发布时间】: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