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

Win10 UWP应用使用SSH.NET遇套接字权限错误求助

解决方案:UWP中SSH.NET权限错误及私钥处理问题

我来帮你搞定这两个踩坑点,都是UWP和WPF环境差异带来的典型问题:

一、解决Socket权限禁止错误(UWP专属限制)

WPF作为传统桌面应用,网络权限基本无限制,但UWP有严格的沙箱机制,必须手动配置网络权限才能访问外部Socket:

  1. 修改Package.appxmanifest配置
    打开你的UWP项目的Package.appxmanifest文件,切换到「功能」标签页,根据你的SSH连接场景勾选对应权限:

    • 连接公网服务器:勾选「Internet (Client)」
    • 连接内网/本地服务器:勾选「Private Networks (Client & Server)」
      保存后重新编译,这是解决权限错误的核心步骤。
  2. 确认SSH.NET版本兼容性
    旧版本SSH.NET对UWP的支持不完善,建议通过NuGet更新到最新稳定版,新版本修复了不少UWP环境下的兼容性问题。

二、私钥字符串处理优化

你已经做了回车符替换,但还有几个细节要注意,避免创建PrivateKeyFile失败:

  1. 确保私钥格式完整
    私钥必须包含开头的-----BEGIN RSA PRIVATE KEY-----和结尾的-----END RSA PRIVATE KEY-----标记,且每个标记单独占一行。如果用户输入的私钥可能缺失这些标记,建议手动补充:

    key = key.Replace("\r", "\n");
    // 补全私钥头部
    if (!key.StartsWith("-----BEGIN RSA PRIVATE KEY-----"))
    {
        key = "-----BEGIN RSA PRIVATE KEY-----\n" + key;
    }
    // 补全私钥尾部
    if (!key.EndsWith("\n-----END RSA PRIVATE KEY-----"))
    {
        key += "\n-----END RSA PRIVATE KEY-----";
    }
    
  2. 正确实现字符串转Stream
    要确保使用UTF-8编码转换,且不带BOM(字节顺序标记),推荐直接用MemoryStream实现:

    using (var keyStream = new MemoryStream(Encoding.UTF8.GetBytes(key)))
    using (var pkf = new PrivateKeyFile(keyStream))
    using (var client = new SshClient(ip, port, username, pkf))
    {
        try
        {
            client.Connect();
            connected = true;
        }
        catch (Exception ex)
        {
            exception = ex.Message;
            connected = false;
        }
    }
    
  3. 注意加密私钥的情况
    如果你的私钥带密码保护,要使用PrivateKeyFile的带密码构造函数:

    var pkf = new PrivateKeyFile(keyStream, "your-private-key-password");
    

测试建议

先配置好UWP的网络权限,再用优化后的私钥处理代码测试,应该就能解决这两个问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:14:01