2017-08-10 118 views
2

3天后,我一直在嘗試建立一個sFTP連接以將文件上傳到客戶端服務器。Golang sFTP SSH:身份驗證失敗

我使用這個: 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 transfert和它的作品。

但它是一個.bat文件,這就是爲什麼我們要改變它。

它使用WinSCP通過rsa putty私鑰連接到sFTP。

這可能是問題之一,因爲如果我理解正確,我不能在golang ssh包中使用puTTy私鑰。

所以我試了膩子鍵和轉換爲openSSH,但都不起作用。

+0

你能檢查服務器上的日誌嗎?它似乎是驗證失敗(如果它是HostKeyAlgorithm或Ciphers列表,你會得到一個「沒有通用算法」的錯誤) – JimB

+0

不幸的是,我沒有訪問服務器。他們有一個非常緩慢的服務,並試圖讓他們檢查需要幾周的事情。 我不能在客戶端獲取日誌嗎?和終端中的openSSH一樣,我似乎有更多的信息作爲客戶端。 – KarDiamond

+1

您是否完全按照書面使用鏈接的示例?它正在默默地吞嚥錯誤,所以我將開始修復代碼並添加一些日誌記錄。否則,你可以進入ssh包,並將'debugHandshake'改爲true來進一步瞭解,或者開始添加你自己的調試日誌。 – JimB

回答

0

隨着openssh你加入 dss的算法,並使用未知的密鑰。這個鍵是你用戶的默認鍵,可能不是你正在使用的那個鍵?

在旁邊使用只有 dss算法和rsa鍵,這可能是問題嗎?

確保您在兩種情況下都使用相同的密鑰和相同的算法,並且算法與密鑰匹配。

如果仍然卡住,可能發佈-vvv和的全部輸出全部錯誤在旁邊。

+0

我在SSH方面的知識有點欠缺。 我以前沒有使用HostKeyAlgorithms,但它不會工作以太。 我將添加一個編輯主要帖子的更多信息。查看關於私鑰的編輯。 另外,我可以使用-vvv輸出錯誤嗎? – KarDiamond

+0

我可能是錯的,但我會懷疑鑰匙。我不明白它是如何工作的,因爲你要求它使用dss(dsa key),但使用rsa鍵。你應該嘗試用你在這裏通過-i選項指定的密鑰來openssh,這樣你就可以確定你在測試同一個密鑰,或者在另一端嘗試一個不同的dsa密鑰(如果你說服務器只使用dss) 。在旁邊沒有-vvv什麼也不做,按照jimb上面的指示。 –

+0

也嘗試只使用ssh-dss openssl,看看你的假設是否正確,這應該是使用的算法。 –