繁体   English   中英

在C#中使用腻子执行Unix命令

[英]Execute Unix commands using putty in C#

嗨,我有以下代码,

我可以打开腻子会话,但是我无法使用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代替了腻子。

我做了以下

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"

请帮助我,我无法继续进行任何操作。 提前致谢。

使用命令行Plink(PuTTY Link)代替GUI会更容易吗? 我相信它更适合自动化任务。

有关示例用法,请参见http://the.earth.li/~sgtatham/putty/0.63/htmldoc/Chapter7.html#plink

我会在这里引用相关的部分,以防链接变坏:

7.2.2使用Plink进行自动连接

通常,Plink与SSH协议一起使用,使您可以直接与服务器上运行的程序进行对话。 为此,您必须确保Plink使用SSH协议。 您可以通过几种方式执行此操作:

按照第7.2.1节中的说明使用-ssh选项。 设置一个保存了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你好,世界你好,世界

Z:\\ sysosd>或,如果您使用所有连接详细信息设置了保存的会话:

Z:\\ sysosd> plink mysession echo你好,世界你好,世界

Z:\\ sysosd>然后,您可以设置其他程序来运行此Plink命令并与其进行交谈,就好像它是服务器计算机上的进程一样。

以下代码给出了解决方案

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();
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM