如何使用密码或 SSH 指纹进行 SFTP 身份验证 WinSCP C# .NET 程序集

Posted

技术标签:

【中文标题】如何使用密码或 SSH 指纹进行 SFTP 身份验证 WinSCP C# .NET 程序集【英文标题】:How to SFTP authenticate using password or SSH fingerprint WinSCP C# .NET assembly 【发布时间】:2016-07-28 23:57:50 【问题描述】:

我正在尝试使用 SFTP 连接连接到服务器,但我正在尝试使用 SSH 指纹进行身份验证,如果这不正确,则应尝试使用 SFTP 密码。

我遇到的问题是需要他们两个都访问服务器,这应该是不同的,如果不是 SSH 指纹,然后尝试使用密码,但不起作用。

有办法先验证指纹,如果不正确,验证用户密码?

这就是我所拥有的:

public string FilesSFTP_FTP()
          
   TransferOptions TransferOption = new TransferOptions();
   TransferOperationResult TransferResult;
   SessionOptions sessionoptions = new SessionOptions();
   Session session = new Session();

   if (DataFile.sTransportType == "S")
   
      sessionoptions.Protocol = Protocol.Sftp;
      sessionoptions.PortNumber = 22;
      sessionoptions.SshHostKeyFingerprint = DataFile.sFingerPrint;
   
   else if (DataFile.sTransportType == "F")
   
      sessionoptions.Protocol = Protocol.Ftp;
      sessionoptions.PortNumber = 21;
   

   sessionoptions.HostName = DataFile.sIPAddress;
   sessionoptions.UserName = DataFile.sUserID;
   sessionoptions.Password = DataFile.sPassword;
   TransferOption.TransferMode = TransferMode.Binary;
   TransferOption.PreserveTimestamp = false;
   TransferOption.ResumeSupport.State = TransferResumeSupportState.Off;

   session.Open(sessionoptions);

还有一个属性需要设置吗?

【问题讨论】:

【参考方案1】:

您无法“使用 SSH 指纹进行身份验证”


SessionOptions.SshHostKeyFingerprint 是 verify the server's host key。不对用户进行身份验证。

要对用户进行身份验证,您需要使用SessionOptions.SshPrivateKeyPath

请参阅Understanding SSH key pairs 了解其中的区别。


至于你的问题。您可以同时设置SessionOptions.SshPrivateKeyPathSessionOptions.Password。 WinSCP 将首先尝试私钥,只有当失败时,它才会回退到密码。 (或者两者都使用,服务器是否需要)

【讨论】:

以上是关于如何使用密码或 SSH 指纹进行 SFTP 身份验证 WinSCP C# .NET 程序集的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Linux 服务器上安装和使用 SFTP?

在带有 ssh、scp 或 sftp 的 jenkins 管道中使用 ssh 凭据

我如何在不使用SSH的情况下使用SFTP?

如何在 Ubuntu 上使用公钥和密码设置 SFTP

ssh使用密钥免密码登录

如何在 open-ssh 和 dropbear 之间匹配 ECDSA 指纹