You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何WinSCP .NET组件需配置SshHostKeyFingerprint而GUI无需?

WinSCP .NET客户端SFTP连接:SshHostKeyFingerprint必填问题解决

为什么GUI不用填但.NET客户端必须指定?

WinSCP GUI首次连接服务器时,会弹出确认主机密钥的对话框,确认后会把密钥指纹保存在本地配置中,后续连接自动复用该指纹。而WinSCP .NET客户端为了规避中间人攻击风险,默认要求显式配置主机密钥指纹,不会自动缓存或静默接受未知密钥,因此代码里必须指定这个参数。

如何获取远程服务器的SshHostKeyFingerprint?

有三种简单可行的方式:

  • 从WinSCP GUI提取
    打开WinSCP并通过已有的SFTP连接登录服务器,点击菜单栏「会话」→「服务器和协议信息」,在弹出窗口中找到「主机密钥指纹」,复制完整格式的字符串(例如ssh-rsa 2048 xx:xx:xx:...)。
  • 从Linux服务器直接查询
    登录目标Linux主机,执行命令ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub(针对RSA密钥),输出的字符串即为指纹,直接复制即可。
  • 通过WinSCP命令行获取
    打开命令提示符,执行winscp.com /command "open sftp://用户名:密码@主机名" "exit",首次运行时会显示主机密钥指纹,复制对应内容即可。

修改后的代码示例

将获取到的指纹填入SshHostKeyFingerprint字段:

try
{
    // Setup session options
    SessionOptions sessionOptions = new SessionOptions
    {
        Protocol = Protocol.Sftp,
        HostName = TagService.MAE_IP_PLC,                    
        UserName = "manufact",
        Password = "SUNRISE",
        // 替换为你获取到的主机密钥指纹
        SshHostKeyFingerprint = "ssh-rsa 2048 aa:bb:cc:dd:ee:ff:gg:hh:ii:jj:kk:ll:mm:nn:oo:pp"
    };

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

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

        TransferOperationResult transferResult;
        transferResult =
            session.PutFiles(@"c:\test\versions_840Dsl", "/card/siemens/versions.xml", false, transferOptions);

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

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

    //return 0;
}
catch (Exception e)
{
    Console.WriteLine("Error: {0}", e);
    //return 1;
    using (StreamWriter sw = File.AppendText(CommonClass.error_path))
    {
        sw.WriteLine("WinSCP Error " + e + " " + Convert.ToString(DateTime.Now));
    }
}

内容的提问来源于stack exchange,提问作者Mdarende

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:25:54