【发布时间】:2011-10-30 16:48:55
【问题描述】:
在 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 发送密码?
【问题讨论】:
-
您绝对需要通过密码进行身份验证吗?使用公钥认证的问题可能会更小
-
我同意这会减少问题,我们可以设置无密码会话,但就是这样 - 必须通过代码支持 usrname/pwd 交互。
-
您不使用纯 .NET sftp 客户端的任何原因(包括身份验证等所有选项)?
-
@Yahia 是否有符合 OpenSSH 的稳定、生产质量的免费 .NET SSH 库?
-
production-quality/compatible/stable 有几个,虽然我使用的那些是商业的......免费的是例如 sshnet.codeplex.com 和 routrek.co.jp/library/support/download/varaterm/… 虽然我从来没有使用过所以不能说关于生产质量的任何事情