【发布时间】:2022-02-24 15:03:22
【问题描述】:
我有一个 C# .NET Windows 服务项目,我正在尝试打开与 SFTP 服务器的 SFTP 连接并将文件放入服务器。
我有 SFTP 主机名、用户名和密钥文件(.key 文件)。 我这里有密码。
请帮助我在 C# 和 .Net 中使用 SFTP
我尝试按照下面提到的方式进行操作:-
using (SSHClient sshClient = new SSHClient(getKeyConnection(HostName, UserName, Port, Myprivatekey.key,PassPhrase)))
{
Console.WriteLine("Connecting to server.");
sshClient.OperationTimeout = TimeSpan.FromSeconds(60);
sshClient.Connect();
Console.WriteLine("Is Connected to server " + sshClient.IsConnected);
}
我的 GetkeyConnection 方法如下所示:
public static ConnectionInfo getKeyConnection(string host, string username, int port, string privateKeyFile,string password)
{
Console.WriteLine("Getting key Connection Info to establish Private Key SFTP");
return new ConnectionInfo(host, port, username, privateKeyObject(username, privateKeyFile,password));
}
我的 privateKeyObject 使用
private static AuthenticationMethod[] privateKeyObject(string username, string publicKeyPath,string password)
{
Console.WriteLine("Private key object method called.");
PrivateKeyFile privateKeyFile = new PrivateKeyFile(publicKeyPath,password);
PrivateKeyAuthenticationMethod privateKeyAuthenticationMethod = new PrivateKeyAuthenticationMethod(username, privateKeyFile);
return new AuthenticationMethod[] { privateKeyAuthenticationMethod };
}
当我尝试连接时,我得到了无效的私钥文件。 知道我们如何做到这一点。
我们有 X.509 证书,该证书使用中间 CA 签名并安装在我们的 SFTP 服务器上。我们有一个私钥文件和一个密码,我在我的身份验证方法中发送。对于 SFTP,我们使用 Renci nuget 包
【问题讨论】:
-
SFTP 是 HTTPS 的子集。两者都使用 TLS 进行身份验证,这是在请求从客户端发送到服务器之前完成的。 TLS 服务器发送一个可能名称为证书的证书块,然后客户端检查存储以查看是否有任何证书与从服务器发送的证书列表匹配。密钥文件是证书。因此,您需要做的就是将证书加载到客户端的商店中。我假设服务器已经在证书块中有证书。
-
SSH 是与 SFTP 不同的协议,您不应同时使用这两种协议。 SSH 用于进行安全的 shell 连接,而 SFTP 用于进行安全的文件传输。除了证书之外,SSH 和 SFTP 都需要用户名和密码。
标签: c# service window key x509certificate