使用WinSCP .NET程序集从FTP下载文件的代码无法连接,但我可以在WinSCP GUI中连接

时间:2017-08-17 03:21:26

标签: c# .net ftp winscp winscp-net

我需要通过WinSCP .NET程序集从FTP下载文件。我目前有这个代码,但错误说身份验证失败。

try
{
    SessionOptions sessionOptions = new SessionOptions
    {
        Protocol = Protocol.Ftp,
        HostName = "172.xx.xxx.xx",
        UserName = "usersample",
        Password = "P@ssw0rd",
        PortNumber = 21
    };

    using (Session session = new Session())
    {
        // Connect
        session.Open(sessionOptions);

        // Download files
        TransferOptions transferOptions = new TransferOptions();
        transferOptions.TransferMode = TransferMode.Binary;

        TransferOperationResult transferResult;
        transferResult =
            session.GetFiles(
                "/HST/sample.txt", "C:\\Users\\john\\Documents\\SampleFolder\\",
                false, transferOptions);

        // Throw on any error
        transferResult.Check();

        // Print results
        foreach (TransferEventArgs transfer in transferResult.Transfers)
        {
            Console.WriteLine("Download of {0} succeeded", transfer.FileName);
        }

        Console.ReadLine();
    }

}
catch (Exception e)
{
    Console.WriteLine("Error: {0}", e);
    Console.ReadLine();
}

我从此引用中获取了代码:https://winscp.net/eng/docs/library_session_getfiles

最初,它有以下内容:

SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"

但我删除它,因为我没有它,我认为这是SFTP(不确定) 我已经手动尝试了凭据并且它们可以工作。我可以登录了。 请帮忙。谢谢。

2 个答案:

答案 0 :(得分:4)

针对您的情况,有WinSCP常见问题解答:
Why I cannot connect/transfer using script, when I can using GUI (or vice versa)?

最简单的解决方案是使用GUI会话中的Generate transfer code函数来获取正常工作的代码模板。

答案 1 :(得分:0)

除SSH连接凭据外,还需要SSH主机密钥指纹。

  

您应该获得SSH主机密钥指纹以及凭据   来自服务器管理员。知道主机密钥指纹因此   能够验证它是保护SSH的一个组成部分   连接。它可以防止中间人攻击。

这可以帮助您获取主持人密钥:

https://winscp.net/eng/docs/faq_hostkey

https://winscp.net/eng/docs/ui_fsinfo