您好,我有以下代码,
我能够打开putty会话,但我无法使用C#提供输入,我尝试使用process.StandardInput.WriteLine
但它无效。请帮帮我。
class Program
{
static void Main(string[] args)
{
Process process = new Process();
process.StartInfo.FileName = @"C:\Users\win7\Desktop\putty.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.Arguments = "-ssh mahi@192.168.37.129 22 -pw mahi";
process.Start();
process.StandardInput.WriteLine("ls");
}
}
大家好,我根据Onots的建议使用了Plink而不是putty。
我做了以下
1.将环境变量中的路径编辑到我的plink位置,即D:\ Plink \
2.手动打开命令提示符并使用命令使用plink登录到我的主机服务器 plink-0.57.exe -ssh mahi@192.168.37.129 -pw mahi我可以手动执行命令。
3.现在我修改了以下代码
class Program
{
static void Main(string[] args)
{
Process process = new Process();
process.StartInfo.FileName = @"D:\Plink0.57\plink-057.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.Arguments = " -ssh mahi@192.168.37.129 -pw mahi";
process.Start();
process.StandardInput.WriteLine("ls");
}
}
但是我无法打开plink并且命令没有使用C#执行。但是会发生的是,命令提示符只是出现并立即关闭,我已将错误消息视为
"Unable to write to standard input"
请帮助我,我无法继续下去。在此先感谢。
答案 0 :(得分:1)
使用命令行Plink(PuTTY Link)代替GUI会不会更容易?我相信它更适合自动化任务。
有关使用示例,请参阅http://the.earth.li/~sgtatham/putty/0.63/htmldoc/Chapter7.html#plink。
我会在这里引用相关部分,以防链接变坏:
7.2.2使用Plink进行自动连接
更典型的是Plink与SSH协议一起使用,以便您使用 直接与服务器上运行的程序对话。要做到这一点,你有 确保Plink使用SSH协议。您可以在几个中执行此操作 方法:
使用-ssh选项,如第7.2.1节所述。设置PuTTY 已保存的会话,描述您要连接的服务器,以及 它还将协议指定为SSH。设置Windows环境 变量PLINK_PROTOCOL到单词ssh。通常不会调用Plink 直接由用户,但由另一个进程自动运行。 因此,您通常不希望Plink提示您输入用户 名称或密码。
接下来,您可能需要避免各种交互式提示 Plink可以生产。系统可能会提示您验证主机密钥 您要连接的服务器,输入用户名或输入 密码。
避免在使用Plink时提示输入服务器主机密钥 自动连接,您应该首先进行手动连接 (使用PuTTY或Plink中的任何一个)到同一服务器,验证主机 键(请参阅第2.2节以获取更多信息),然后选择是以添加 注册表的主机密钥。之后,Plink命令连接到 除非主机密钥,否则该服务器不应提供主机密钥提示 变化。
为避免提示输入用户名,您可以:
使用-l选项在命令行上指定用户名。对于 例如,plink login.example.com -l fred。设置PuTTY保存的会话 它描述了您要连接的服务器,也是 指定要登录的用户名(请参阅第4.14.1节)。避免 提示输入密码,你几乎肯定会设置 公钥验证。 (有关一般性介绍,请参阅第8章 公共密钥身份验证。)同样,您可以通过两种方式执行此操作:
设置PuTTY保存的会话,描述您所在的服务器 连接到,并且还指定了私钥文件(参见章节 4.20.8)。为了在没有提示的情况下工作,您的私钥将不需要密码。将私钥存储在Pageant中。看到 第9章了解更多信息。完成所有这些后,你就完成了 应该能够在SSH服务器机器上运行远程命令 让它自动执行而不提示:
Z:\ sysosd> plink login.example.com -l fred echo hello,world hello, 世界
Z:\ sysosd>或者,如果您已经设置了所有保存的会话 连接细节:
Z:\ sysosd> plink mysession echo hello,world hello,world
Z:\ sysosd>然后,您可以设置其他程序来运行此Plink 命令并与它交谈就好像它是服务器机器上的进程一样。
答案 1 :(得分:0)
以下代码给出了解决方案
class Program
{
static void Main(string[] args)
{
ProcessStartInfo startinfo = new ProcessStartInfo();
startinfo.FileName = @"D:\Plink0.57\plink-057.exe";
startinfo.Arguments = "-ssh mahi@192.168.37.129 -pw mahi";
Process process = new Process();
process.StartInfo = startinfo;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.Start();
process.StandardInput.WriteLine("ls");
process.WaitForExit();
Console.ReadKey();
}
}