2013年2月24日星期日

Execute SSH Commands in PLink using C#


Here's a method for executing a single ssh command using plink.  A timeout for reading the output is included as well.  Some adjustments may need to be made to work with expected response times but the general idea is all here.

private static string ExPlinkCommand(string ip, string sshuser, string sshpw, string command)
{
string param = “-l “ + sshuser + “ -pw “ + sshpw + “-ssh “ + sshuser + “@” + ip + “ “ + command;
string plink = “physicalpath\plink”;
ProcessStartInfo program = new ProcessStartInfo(plink, param);

program.UseShellExecute = false;
program.RedirectStandardoutput = true;
program.RedirectStandardInput = true;
program.RedirectStandardError = true;
program.CreateNoWindow = true;

Process process = Process.Start(program);

StringBuilder readout = new StringBuilder();
StreamReader reader = process.StandardOutput;
StreamReader exreader = porcess.StandardError;
StreamWriter writer = process.StandardInput;
writer.AutoFlush = true;
Thread.Sleep(1000);
writer.WriteLine(“y”);

Stopwatch sw = new Stopwatch();
    sw.Start();

    while ((reader.Peek() >= 0 || !process.HasExited) && sw.Elapsed < new TimeSpan(0,0,15))
    {
   readout.Append(reader.ReadLine() + “\r\n”);
    }
    sw.Reset();
    while ((exreader.Peek() >= 0 || !process.HasExited) && sw.elapsed < new TimeSpan(0,0,15))
    {
   readout.Append(exreader.ReadLine() + “\r\n”);
    }
    sw.Stop();

    string output = readout.ToString();

    if (output.StartsWith(“FATAL ERROR:”))
    {
   throw new Exception(output);
    }
    return output;
}

没有评论:

发表评论