C# 从Windows上的应用程序与sftp(cygwin)交互

C# 从Windows上的应用程序与sftp(cygwin)交互,c#,ssh,cygwin,sftp,expect,C#,Ssh,Cygwin,Sftp,Expect,在Unix上,您可以使用Expect和Empty等工具,使用伪终端与sftp等终端应用程序进行交互。我有一台安装了cygwin的Windows计算机,我的C#应用程序需要启动一个sftp会话才能将一些文件传输到远程计算机 我从这样的代码开始 var p = new Process(); p.StartInfo = new ProcessStartInfo { FileName = "sftp", UseShellExecute = false, CreateNoWind

在Unix上,您可以使用
Expect
Empty
等工具,使用伪终端与
sftp
等终端应用程序进行交互。我有一台安装了cygwin的Windows计算机,我的
C#
应用程序需要启动一个sftp会话才能将一些文件传输到远程计算机

我从这样的代码开始

var p = new Process();

p.StartInfo = new ProcessStartInfo
{
    FileName = "sftp",
    UseShellExecute = false,
    CreateNoWindow = false,
    RedirectStandardInput = true,
    Arguments = username + "@" + server
};

p.Start();
p.StandardInput.WriteLine(password);

问题在于
sftp
不会从
stdin
读取密码,而只会从终端读取密码。这就是Expect的用武之地。除了在cygwin中安装
Expect
之外,是否有任何方法可以从
C#
程序以交互方式向
sftp
发送密码

Cygwin有,包括和(可能)空的。理论上你仍然可以使用这些。。。(并不是说这是最安全、紧凑或理想的选择……但这是一个选择!)

您确实需要通过密码进行身份验证吗?使用公钥身份验证可能不会有太多问题Matic我同意这会有太多问题,我们可以设置无密码会话,但事实就是这样-必须通过代码支持usrname/pwd交互。您不使用纯.NET sftp客户端(具有所有身份验证选项等)的任何原因?@Yahia是否有稳定的,生产质量免费的.NET SSH库,与OpenSSH兼容?生产质量/兼容/稳定有几种,尽管我使用的是商用的。。。例如,free是免费的,虽然我从未使用过它,所以不能说任何关于生产质量的问题,但我确实说过“在cygwin中安装Expect之外”,但如果没有其他选择,这可能是我们最终的选择。