我正在尝试使用C#中的WinSCP连接到SFTP服务器.这是我的代码:
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Sftp,
HostName = "ip",
PortNumber = portNR,
UserName = "username",
Password = "",
SshHostKeyFingerprint = "fingerPrint",
SshPrivateKeyPath = "\\PrivateKey\\PrivateKey.ppk ",
};
using (Session session = new Session())
{
session.Open(sessionOptions);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行应用程序时,它达到了这个目的
session.Open(sessionOptions);
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
已断开连接:没有可用的支持身份验证方法(服务器已发送:publickey,gssapi-with-mic)
我正在尝试使用WinSCP .NET程序集连接到WinSCP服务器。我遇到的问题是它炸弹检查主机密钥指纹。我已经创建了一个RSA密钥。我的代码如下:
var server = new WinSCP.SessionOptions();
server.UserName = "ftp_user";
server.Password = "******";
server.HostName = "192.x.x.x";
server.Protocol = WinSCP.Protocol.Sftp;
server.SshHostKeyFingerprint =
"9f:39:52:d5:08:0c:1d:a8:02:c9:7e:44:49:7f:44:fb";
var session = new WinSCP.Session();
session.Open(server);
Run Code Online (Sandbox Code Playgroud)
在SshHostKeyFingerprint属性分配中,出现以下错误:
SSH主机密钥指纹“ 9f:39:52:d5:08:0c:1d:a8:02:c9:7e:44:49:7f:44:fb”与模式/(ssh-rsa | ssh-dss不匹配)?\ d +([0-9a-f] {2}:){15} [0-9a-f] {2}(;(ssh-rsa | ssh-dss)?\ d +([0-9a- f] {2}:){15} [0-9a-f] {2})* /
如果我没有看错,它正在检查15个2个字符集,并分配了16个设置值。我从服务器获得了此值。
更新:
我所缺少的是指纹类型(ssh-dss或ssh-rsa)及其大小(1024,2048等等)。因此,答案如下:
server.SshHostKeyFingerprint =
"ssh-rsa 1024 9f:39:52:d5:08:0c:1d:a8:02:c9:7e:44:49:7f:44:fb";
Run Code Online (Sandbox Code Playgroud)
如果我正确阅读了正则表达式,它不会让您知道在指纹类型之后需要指纹大小。
我希望这可以帮助其他人。感谢大家的见解和投入。
我在C#中创建一个小型.NET应用程序,将文件上传到FTP服务器.我正在使用.NET DLL for WinSCP,我一直试图找到一个很好的解决方案来解决我的问题.
我将放置所有文件的FTP文件夹将由另一个应用程序监视.然后,此应用程序将采用这些文件并自动处理它们.
所以我想避免的是在传输完成之前我的文件被应用程序抓取.
所以我想使用临时文件名使用或可能是临时文件夹,然后在上传完成后移动文件.
你认为什么是最好的方法?第二个问题是,在WinSCP .NET中,应该有一个Transfer Resume选项,它使用临时名称传输文件,并在完成时重命名.但我似乎无法让这个工作,并正在寻找任何关于如何使这个工作的提示?
我试图打开文件以使用WinSCP .NET程序集从SFTP读取,这与将文件从SFTP存档到Azure blob的练习相当。
要将blob上传到Azure,我正在使用
using (var fileStream = inputStream)
{
blockBlob.UploadFromStream(fileStream);
blobUri = blockBlob.Uri.ToString();
}
Run Code Online (Sandbox Code Playgroud)
如何从SFTP服务器上的文件获取流?
我设法使用SftpClient下面的代码来获取流,并且可以工作,但是不幸的是,使用WinSCP .NET程序集无法实现相同的目的。
sftpClient.OpenRead(file.FullName)
Run Code Online (Sandbox Code Playgroud)
谁能帮我使用WinSCP .NET程序集实现相同的目的?
因为我需要使用用户名,密码和私钥连接到SFTP,所以我使用的是WinSCP .NET程序集。
谢谢
我用C#编写了一个使用System.IO.GetDirectoires()和的应用程序System.IO.GetFiles()
我现在必须将其转换为使用SFTP.我有PutFiles和GetFilesWinSCP .NET程序集的经验,但我无法弄清楚如何获取目录列表.GetFileswinscp.exe中有一个我可以用于文件,但据我所知,没有办法获取目录.有没有人有办法做到这一点,或者是否有一个更容易使用的库.
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Sftp,
HostName = "example.com",
UserName = "user",
Password = "mypassword",
SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
};
using (Session session = new Session())
{
// Connect
session.Open(sessionOptions);
}
Run Code Online (Sandbox Code Playgroud) 我有一个包,它使用 WinSCP 从 FTP 下载文件,当我在本地执行它时,它运行得很好。但是当我们从 SSIS 数据库目录的已部署版本运行时,我们遇到了问题。已为 .dll 文件完成 GAC 注册。
下面是我们得到的错误。

更新

因此,基本上我试图从服务器上的整个文件夹中仅下载一个文件。
文件夹“domain”现在包含这些文件:
文件1.txt
文件2.txt
文件3.txt
因此,正如我在 WinSCP 文档中看到的,如果我只想下载一个文件,我仍然应该使用Session.GetFiles()(方法文档)和文件的完整路径。好吧,但我不明白我的问题是什么,因为它不起作用。
session.GetFiles("/domains/domain/File1.txt", Directory.GetCurrentDirectory());
Run Code Online (Sandbox Code Playgroud)
但是,如果我将远程路径更改为整个目录,而不是单个文件,我需要它效果很好,但我不需要所有三个 .txt 文件。
session.GetFiles("/domains/domain/", Directory.GetCurrentDirectory());
Run Code Online (Sandbox Code Playgroud) 我正在使用 WinSCP .NET 程序集通过 C# .NET 通过 SFTP 进行下载和上传。我可以使用下载功能,但我正在寻找一种方法来列出远程服务器中的文件(或至少列出特定扩展名),因此用户只需从具有特定扩展名(例如 )的文件中进行选择即可.txt获取他们想要的文件。
有没有办法用 WinSCP .NET 程序集来做到这一点?
由于我正在开发一个 .NET C# 项目,该项目使用 WinSCP .NET 程序集来实现 SFTP 无密码连接。到目前为止,我已经制作了一个 UI,我们必须在其中提供 SSH 密钥指纹、释义和.ppk文件路径。
我的问题是,如果用户仅给出其文件路径,有没有办法通过代码自动获取“SSH 密钥指纹” .ppk?
我正在尝试使用SFTP连接从远程目录中获取文件计数,但我得到.并且..这些点数就像文件一样,我在远程目录中有2个文件,但是计算4个文件,包括.和...
有人可以帮我解决这个问题吗?
这是我的代码:
filesCount = session.ListDirectory(DataFile.sRemoteDirectory).Files.Count;
Run Code Online (Sandbox Code Playgroud)
谢谢!