为什么FileZilla在不知道任何密钥的情况下工作,但WinSCP没有?

时间:2012-09-06 15:22:33

标签: sftp public-key filezilla winscp winscp-net

我获得了与FileZilla连接的SFTP服务器的连接详细信息,然后从该SFTP成功下载了一个文件。

我唯一的细节是主持人,端口,用户和通行证。

现在我正在尝试通过WinSCP .NET程序集(C#)连接到同一台服务器

using(Session session = new WinSCP.Session()) {
    session.Open(new SessionOptions() { 
        Protocol = Protocol.,
        HostName = "ftp.*********.be",
        UserName ="*****",
        Password ="*****"
    });

    TransferOptions transferOptions = new TransferOptions();
    transferOptions.TransferMode = WinSCP.TransferMode.Binary;
    TransferOperationResult transferResult;
    transferResult = session.GetFiles("/downld/fileonserver.dbf",@"c:\testfolder\localfilename.dbf", false, transferOptions);

无论我在这里尝试什么,它一直要求SSH的密钥,但我没有那个密钥,我在网上某处生成了一个128位RSA密钥并将其放在会话选项中,如:

SshHostKeyFingerprint = "ssh-rsa 1024 82:09:12:b4:93:92:3a:61:10:90:61:12:b4:XX:XX:XX"

但这只是告诉我密钥无效。

我有点想到我可能需要服务器上的公共/私有SSH密钥才能使用它,但我遗憾地无法访问此服务器。

由于FileZilla可以在没有输入任何密钥的情况下连接到它,为什么我的C#程序不能这样做呢?

在安全方面,我不是专家,所以请指出正确的方向。我找到了this thread,但我无法访问FTP服务器上的.ssh文件夹,而且我真的无法获得它们的用途。

2 个答案:

答案 0 :(得分:4)

  1. 您将SSH服务器公共主机密钥验证与客户端公钥验证混淆。这是两件完全不同的事情。这首先涉及服务器的公钥,而后者涉及您的帐户公钥。

    Read about SSH Key Pairs了解其中的差异。

  2. FileZilla 无法连接,无需验证服务器的公共主机密钥。在第一次连接时,它总是提示您接受密钥。完成后,它会选择性地缓存密钥,并且不会再次提示您,除非密钥更改。

    FileZilla host key verification

    您可能已经忘记之前已经有过此提示或者其他人已经从您的计算机连接到服务器。

    任何SSH(SFTP)客户端都必须这样做。如果您未验证服务器的主机密钥,则会丢失任何安全性。

  3. 您应该从服务器管理员处获取主机密钥指纹。

    如果还没有,可以在WinSCP Server and Protocol information dialog上看到它。

    有关详细信息,请参阅WinSCP常见问题Where do I get SSH host key fingerprint to authorize the server?

答案 1 :(得分:0)

我通过将返回到我的filezilla客户端的SSH密钥复制到我的c#app中解决了这个问题。我不知道这是否是正确的做法,但至少它让我的解决方案现在正在运作。

它也是一个SSH-DSS密钥2048密钥,而不是SSH-RSA 1024,这就是为什么搞乱密钥的原因我猜错了。