1

我正在尝试使用 SSH.NET 库访问 FTP 服务器,但没有任何运气。我正在提供与 FileZilla 中相同的凭据,这些凭据运行良好。SSH 抛出错误“套接字读取操作已超时”。如果我使用与下面相同的代码但没有指定端口:21,我会收到一个错误:“用户无法验证”。有人可以提供见解吗?

string tempHost = @"ftp.mywebsite.com";
string tempUser = @"ftp@mywebsite.com";
string tempPassword = @"try123";

using (SftpClient sftpClient = 
       new SftpClient((ConnectionInfo)new PasswordConnectionInfo(tempHost,21, tempUser, tempPassword)))
        {
          sftpClient.Connect();
        }
4

2 回答 2

3

如果您仍然无法解决,下面的代码对我有用

using (var sftp = new SftpClient(host, userName, password))
            {
                sftp.Connect();                    
                //Do some operation
                sftp.Disconnect();
            }

阿南特

于 2014-05-05T23:39:33.787 回答
1

SSH 工具(如 Renci SSH)旨在用于端口 22(安全)。如果要连接到端口 21,则需要另一个库。我使用了 FluentFTP,它不像 Renci 那样易于使用,但可以完成工作。

这是一个可用于将文件上传到服务器的代码示例(版本 19.1.2)。无论您使用端口 21 还是 22,我都强烈建议在写操作之间至少间隔 500 毫秒,以便让服务器有时间喘息。

using (FtpClient client = new FtpClient())
        {
            client.Host = ftpAddress;
            client.Credentials = new NetworkCredential(ftpUserName, ftpPassword);
            client.Port = 21;
            client.Connect();
            using (Stream s = new FileStream(localPathWithFileName, FileMode.Open))
            {
                try
                {
                    //log.Info($"Uploading file...");
                    client.Upload(s, ftpFilePathWithFileName);
                    //log.Info($"File uploaded!");
                }
                catch(Exception e)
                {
                    //log.Info($"{e.StackTrace}");
                }
                finally
                {
                    client.Disconnect();
                }
            }


        }
于 2019-10-03T00:40:58.843 回答