我使用 SharpSSH .NET 库进行 SFTP。
http://www.tamirgal.com/blog/page/sharpssh.aspx
当我尝试连接服务器时出现错误
算法协商失败
但当尝试通过 FileZilla 连接时,它可以正常工作。
我发现一些有相同的错误,但我不知道如何解决这个问题。
就像这里: http: //www.samhohce.net/questions/30190272/jsch-algorithm-negotiation-fail
我目前在我的一个项目中遇到了一个非常奇怪的问题.
我在我的代码中实现了Tamir Gal的Sharp SSH库,以便每个FTP上传一些文件.当我在调试模式下运行代码时,一切正常.但是当我构建解决方案并使用该构建版本进行尝试时,我得到一个System.IO.IOException:
Tamir.SharpSsh.jsch.JSchException: Session.connect: System.IO.IOException: End of IO Stream Read at Tamir.SharpSsh.jsch.IO.getByte(Byte[] array, Int32 begin, Int32 length)
at Tamir.SharpSsh.jsch.Session.read(Buffer buf)
at Tamir.SharpSsh.jsch.User.Auth.start(Session session)
at Tamir.SharpSsh.jsch.UserAuthNone.start(Session session)
at Tamir.SharpSsh.jsch.Session.connect(Int32 connectTimeout)
at Tamir.SharpSsh.jsch.Session.connect(Int32 connectTimeout)
at Tamir.SharpSsh.jsch.SshBase.ConnectSession(Int32 tcpPort)
at Tamir.SharpSsh.jsch.SshBase.Connect(Int32 tcpPort)
at Tamir.SharpSsh.jsch.SshBase.Connect()
Run Code Online (Sandbox Code Playgroud)
看起来数据流存在问题(Hello Captain Obvious!:)),因此程序甚至没有建立完成连接方法.我只是不明白为什么一切都在调试时工作.dll在构建过程中被正确复制.
代码如下所示:
sftpClient = new Sftp(this.ftpHost, this.ftpUser, this.ftpPassword);
sftpClient.Connect();
Run Code Online (Sandbox Code Playgroud)
所有变量都具有正确的值,我可以在像Filezilla这样的客户端中使用它们连接到SFTP服务器.
如果有人能给我一个暗示或者有类似的问题,我会非常感谢每一条评论.
提前谢谢大家,祝你有个愉快的一天.
有没有办法使用 Tamir.SharpSsh 从 SFTP 服务器获取基于修改日期的文件?目前我正在按文件名下载文件,但我的要求是按修改日期。
var sftp = new Sftp(Host, UserName, Password);
sftp.Connect();
sftp.Get(sourcePath+"/*.*." + name + "*", destinationPath);
Run Code Online (Sandbox Code Playgroud) 我想问一下如何使用 sftp 远程删除文件我尝试过使用 SharpSSH 但它不起作用,我得到了 SftpException
我首先在 sftp.cs 中添加了此代码
Run Code Online (Sandbox Code Playgroud)public void Delete(string path) { SftpChannel.rm(path); }
然后我在程序中输入了这个
Sftp ftp = new Sftp("ip 地址", "用户名", "密码"); ftp.Connect(); ftp.Delete("路径");
谢谢,问题解决了问题是我忘记在路径前面放一个“/”,所以它失败了
最近,我们将使用Tamir.SharpSSH的应用程序从Windows 2003服务器移至Windows Server 2012。
在测试我们应用的SFTP功能时,我们收到以下错误消息:
{“ Session.connect:System.NullReferenceException:对象引用未设置为对象的实例。\ r \ n位于Tamir.SharpSsh.jsch.jce.HMACMD5.update(Byte [] foo,Int32 s,Int32 l)\在Tamir.SharpSsh.jsch.jce.HMACMD5.update(Int32 i)处为r \ n,在Tamir.SharpSsh.jsch.Session.read(Buffer buf)中为r \ n在Tamir.SharpSsh.jsch.UserAuth中为r \ n。从Tamir.SharpSsh.jsch.UserAuthNone.start开始(会话会话)\ r \ n,在Tamir.SharpSsh.jsch.Session.connect(Int32 connectTimeout)处启动(会话会话)\ r \ n
我检查以确保已禁用FIPS兼容算法。
然后,我们从项目中删除了对Tamir.SharpSSH的DLL引用,并将源代码项目添加到了我们现在可以进入代码的位置,以更具体地确定SharpSSH库中发生故障的位置。
该错误发生在update()方法中的cs.Write(foo,s,l)处,如下所示:
public void update(byte[] foo, int s, int l) { cs.Write( foo, s, l); }
Run Code Online (Sandbox Code Playgroud)
这是因为cs对象引用为NULL。
应该在HMACMD5.cs的init()方法(最后一行)中设置cs对象引用,但是似乎没有调用此方法。
public void init(byte[] key)
{
if(key.Length>bsize)
{
byte[] tmp=new byte[bsize];
Array.Copy(key, 0, tmp, 0, bsize);
key=tmp;
}
// SecretKeySpec skey=new SecretKeySpec(key, "HmacMD5");
// mac=Mac.getInstance("HmacMD5");
// mac.init(skey);
mentalis_mac = new Org.Mentalis.Security.Cryptography.HMAC(new System.Security.Cryptography.MD5CryptoServiceProvider(), key); …
Run Code Online (Sandbox Code Playgroud) 我正在寻找.net的免费DLL来处理SFTP连接.
我发现了这个项目SharpSSH,但它缺乏文档.
我花了很多时间来计算dll是如何工作的.我创建了一个测试项目,然后开始测试不同的功能.某些功能正在起作用,例如删除文件.
我有putfile()函数和getfile()的问题.
这是一个例子:
Dim ssh As SFTPUtil
ssh = New SFTPUtil("MY SERVER", "MY USER", "MY PW")
ssh.GetFile("/home/sftptest/test111.xml", "C:\\text.xml")
Run Code Online (Sandbox Code Playgroud)
请注意,getfile()参数是:
Public Sub GetFile(remotePath As String, localPath As String)
Run Code Online (Sandbox Code Playgroud)
我介入函数,但我没有得到正确的方法来传递这些参数.
我真的不知道我是否应该使用斜杠(/)或反斜杠().我知道Linux使用(/)
我注意到例如"C:\"已经转换为"C:\\".
只是提到SFTP是在Linux机器上.
谢谢.