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

时间:2016-04-07 21:19:26

标签: c# authentication ssh winscp winscp-net

我尝试连接到具有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 个答案:

答案 0 :(得分:2)

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

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

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

请参阅Understanding SSH key pairs了解其中的差异。

至于你的问题。您可以同时设置SessionOptions.SshPrivateKeyPathSessionOptions.Password。 WinSCP将首先尝试私钥,只有在失败时,它才会回到密码。