C# Renci.SshNet.Sftp Connect 抛出 ArgumentNullException

标签 c# ssh ssh.net

我正在使用 Renci.SshNet.Sftp 连接到 SFTP。当我尝试调用 sftpClientObject.Connect() 时,出现以下错误。请找到下面的错误。前几天还工作得很好。检查了认证详情,完美。

var _sftpClient = new SftpClient(_hostName, _userName, _password);
using (_sftpClient)
{
    _sftpClient.Connect();
    // Other code to follow
}

Error:
Value cannot be null.
Parameter name: At least one element in the specified array was null.

异常堆栈跟踪:

   at System.Threading.WaitHandle.WaitAny(WaitHandle[] waitHandles, Int32 millisecondsTimeout, Boolean exitContext)
   at System.Threading.WaitHandle.WaitAny(WaitHandle[] waitHandles, TimeSpan timeout, Boolean exitContext)
   at System.Threading.WaitHandle.WaitAny(WaitHandle[] waitHandles, TimeSpan timeout)
   at Renci.SshNet.Session.WaitHandle(WaitHandle waitHandle)
   at Renci.SshNet.PasswordAuthenticationMethod.Authenticate(Session session)
   at Renci.SshNet.ConnectionInfo.Authenticate(Session session)
   at Renci.SshNet.Session.Connect()
   at Renci.SshNet.BaseClient.Connect()
   at SftpPoller.FileTransferClient.ProcessFilesInSftp(TextWriter log) in 

但是当我使用以下代码时,它起作用了:

var methods = new AuthenticationMethod[1];
methods[0] = new PasswordAuthenticationMethod(_userName, _password);
var con = new ConnectionInfo(_hostName, _userName, methods) {Timeout = new TimeSpan(0, 0, 0, 60)};
_sftpClient = new SftpClient(con);

谁能帮我解决这个问题吗?

谢谢

最佳答案

似乎唯一可以想象的情况是,当PasswordAuthenticationMethod.Authenticate可以将未初始化的等待句柄传递给WaitHandle.WaitAny时, session 关闭而身份验证正在执行。正在进行中。

如果 session 由于超时而关闭,设置更高的超时可以解决问题,正如您自己所发现的那样。

设置超时的更简单的代码是:

var _sftpClient = new SftpClient(_hostName, _userName, _password);
_sftpClient.ConnectionInfo.Timeout = TimeSpan.FromSeconds(60);

您似乎使用的是旧版本的 SSH.NET(可能是 NuGet 中提供的版本 2013.4.7)。由于后续版本对相关部分代码进行了重构,升级也可能会解决这个问题。无论如何,您都应该这样做,因为 NuGet SSH.NET 包确实很旧。

关于C# Renci.SshNet.Sftp Connect 抛出 ArgumentNullException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33216301/

相关文章:

c# Sql命令错误

c# - 在哪里放置外部 *.dll 的设置以本地运行 VS 代码

spring 配置服务器 git ssh 未知主机 key

c# - 如何在本地控制台上使用 C# SSH.NET 执行的远程主机 (Raspberry Pi) 上运行的 Python 程序连续写入输出?

c# - 使用绑定(bind)字段时如何更新 GridView

bash - 退出 SSH 隧道而不关闭它

shell - 当任何连接超时时,xargs sh -c 'ssh …'停止执行

c# - 将通过 HTTP 上传到 ASP.NET 的文件进一步上传到 C# 和 SSH.NET 中的 SFTP 服务器

c# - 在 C# 中使用 SSH.NET SFTP 下载目录

c# - 如何从总秒数中获取日期时间?