如何使用 C# 和 .NET 将 SFTP 连接与密钥文件一起使用
How to use SFTP connection with key file using C# and .NET
我有一个 C# .NET 项目,我正在尝试打开到服务器的 SFTP 连接并将文件放到服务器上。
我有 SFTP 主机名、用户名 和 密钥文件(.pem 文件)。
我这里没有密码。
请帮助我在 C# 和 .Net 中使用 SFTP。
可能每个 SFTP/SSH 库都支持 public 密钥验证。
例如:
-
var privateKey = new PrivateKeyFile(@"C:\some\path\key.pem");
var client = new SftpClient("example.com", "username", new[] { privateKey });
client.Connect();
如果私钥加密:
var privateKey = new PrivateKeyFile(@"C:\some\path\key.pem", "passphrase");
WinSCP .NET assembly (NuGet 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 默认情况下无法做到这一点,这是一个安全漏洞。
如果私钥是加密的,加PrivateKeyPassphrase
or SecurePrivateKeyPassphrase
.
WinSCP GUI 可以generate a code template for you。
(我是图书馆的作者)
我 运行 遇到了同样的问题。 Martin 提供的代码当然对我有帮助,但是它缺少一些满足我需要的设置。
我需要添加一个端口号和一个密码短语来完全自动化我的解决方案。所以代码最终像:
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Sftp,
PortNumber = port,
HostName = host,
UserName = username,
PrivateKeyPassphrase = passphrase,
SshHostKeyFingerprint = fingerprint,
SshPrivateKeyPath = privatekeyfile
};
我有一个 C# .NET 项目,我正在尝试打开到服务器的 SFTP 连接并将文件放到服务器上。
我有 SFTP 主机名、用户名 和 密钥文件(.pem 文件)。
我这里没有密码。
请帮助我在 C# 和 .Net 中使用 SFTP。
可能每个 SFTP/SSH 库都支持 public 密钥验证。
例如:
-
var privateKey = new PrivateKeyFile(@"C:\some\path\key.pem"); var client = new SftpClient("example.com", "username", new[] { privateKey }); client.Connect();
如果私钥加密:
var privateKey = new PrivateKeyFile(@"C:\some\path\key.pem", "passphrase");
WinSCP .NET assembly (NuGet 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 默认情况下无法做到这一点,这是一个安全漏洞。如果私钥是加密的,加
PrivateKeyPassphrase
orSecurePrivateKeyPassphrase
.WinSCP GUI 可以generate a code template for you。
(我是图书馆的作者)
我 运行 遇到了同样的问题。 Martin 提供的代码当然对我有帮助,但是它缺少一些满足我需要的设置。
我需要添加一个端口号和一个密码短语来完全自动化我的解决方案。所以代码最终像:
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Sftp,
PortNumber = port,
HostName = host,
UserName = username,
PrivateKeyPassphrase = passphrase,
SshHostKeyFingerprint = fingerprint,
SshPrivateKeyPath = privatekeyfile
};