3

我获得了 SFTP 服务器的连接详细信息,使用 FileZilla 连接到它,然后从该 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 可以在我不输入任何 KEYS 的情况下连接到它,为什么我的 C# 程序不能这样做呢?

在涉及安全相关的事情时,我不是专家,所以请指出我正确的方向。我找到了这个线程,但我无权访问.sshFTP 服务器上的文件夹,而且我真的不知道他们在做什么。

4

2 回答 2

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

    阅读 SSH 密钥对以了解其中的区别。

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

    FileZilla 主机密钥验证

    您可能忘记了您之前收到过此提示,或者之前有人从您的机器上连接到了服务器。

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

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

    如果您没有,您可以在 WinSCP服务器和协议信息对话框中看到它。

    有关详细信息,请参阅 WinSCP 常见问题解答我在哪里获取 SSH 主机密钥指纹以授权服务器?

于 2014-06-13T06:51:05.537 回答
0

我通过将返回到 FileZilla 客户端的 SSH 密钥复制到我的 C# 应用程序中解决了这个问题。我不知道这是否是正确的做法,但至少它让我的解决方案现在可以工作了。

它也是一个 SSH-DSS 密钥 2048 密钥而不是 SSH-RSA 1024,这就是我猜想弄乱密钥一直失败的原因。

于 2012-09-06T16:25:25.113 回答