如何使用C#和.Net(带有密钥文件)使用SFTP连接

问题描述 投票:1回答:1

我有一个C#.Net项目,正在尝试打开与服务器的SFTP连接并将文件放置到服务器。

我有SFTP 主机名用户名密钥文件(。pem文件)。我这里没有password

请帮助我使用C#和.Net中的SFTP。

c# .net sftp ssh-keys pem
1个回答
2
投票

可能每个SFTP / SSH库都支持公用密钥身份验证。

例如:

  • SSH.NETNuGet package):

    var privateKey = new PrivateKeyFile(@"C:\some\path\key.pem");
    var client = new SftpClient("example.com", "username", new[] { privateKey });
    client.Connect();
    
  • WinSCP .NET assemblyNuGet package):

    SessionOptions sessionOptions = new SessionOptions
    {
        Protocol = Protocol.Sftp,
        HostName = "example.com",
        UserName = "username",
        SshHostKeyFingerprint = "ssh-rsa 2048 ...=",
        SshPrivateKeyPath = @"C:\some\path\key.ppk",
    };
    
    using (Session session = new Session())
    {
        session.Open(sessionOptions);
    
        // Your code
    }
    

    WinSCP需要将密钥转换为PPK格式(您可以使用WinSCP GUI或PuTTYgen)。另请注意,WinSCP会验证SSH主机密钥(SshHostKeyFingerprint)。 SSH.NET默认无法执行此操作,这是一个安全漏洞。

    (我是图书馆的作者)


0
投票

可能每个SFTP / SSH库都支持公用密钥身份验证。

例如:

  • SSH.NET

    var privateKey = new PrivateKeyFile(@"C:\some\path\key.pem");
    var client = new SftpClient("example.com", "username", new[] { privateKey });
    client.Connect();
    
  • WinSCP .NET assembly

    SessionOptions sessionOptions = new SessionOptions
    {
        Protocol = Protocol.Sftp,
        HostName = "example.com",
        UserName = "username",
        SshHostKeyFingerprint = "ssh-rsa 2048 2EPqmpSRaRtUIqwvm15rzavssrhHxJ3avJWh9mBaz8M=",
        SshPrivateKeyPath = @"C:\some\path\key.ppk",
    };
    
    using (Session session = new Session())
    {
        session.Open(sessionOptions);
    
        // Your code
    }
    

    (我是图书馆的作者)

© www.soinside.com 2019 - 2024. All rights reserved.