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

使用C#控制台程序通过SFTP私钥连接Azure Blob Storage报错求助

问题解决:C# SFTP连接Azure Blob Storage报「THE CONNECTION IS CLOSED BY THE SERVER」

一、连接报错的排查与解决

WinSCP可正常连接说明服务端配置无问题,问题出在Renci.SshNet客户端的适配配置上,以下是针对性解决方案:

1. 修正用户名格式

Azure Blob SFTP的正确用户名格式为 <存储账户名>.<SFTP用户名>,比如你的存储账户是blobstoragetest、用户是user1,完整用户名应为blobstoragetest.user1,而非单独的user1。WinSCP可能自动补全了格式,但Renci.SshNet需手动指定正确格式。

2. 解决密钥格式兼容问题

Azure生成的私钥默认是OpenSSH格式(.pem后缀),Renci.SshNet对部分带密码的OpenSSH密钥支持不完善,可通过两种方式处理:

  • 转换密钥格式:用WinSCP导出兼容格式——打开已连接的WinSCP会话,进入「工具」>「导出密钥」,选择「OpenSSH RSA」格式保存为新文件,在代码中使用这个新密钥文件。
  • 显式指定密钥类型:替换PrivateKeyFile为RsaPrivateKeyFile加载密钥:
    var privateKey = new RsaPrivateKeyFile(privateKeyFilePath, privateKeyPassphrase);
    

3. 配置SSH协议与连接参数

Azure Blob SFTP对SSH协议版本和连接超时有要求,手动添加以下配置:

var connectionInfo = new ConnectionInfo(host, port, username,
    new PrivateKeyAuthenticationMethod(username, privateKey))
{
    ProtocolVersion = ConnectionProtocol.SSH2,
    Timeout = TimeSpan.FromSeconds(30),
    KeepAliveInterval = TimeSpan.FromSeconds(10)
};

4. 处理主机密钥验证

Renci.SshNet默认严格验证主机密钥,未配置时可能导致连接断开。测试阶段可临时信任所有主机密钥(生产环境需替换为真实主机密钥验证):

connectionInfo.HostKeyReceived += (sender, e) => e.CanTrust = true;

二、Azure SSH密钥下载的扩展名

在Azure创建SFTP用户时下载的私钥文件默认扩展名为.pem(OpenSSH格式),对应的公钥文件扩展名为.pub。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:08:16