Putty - 使用C#动态删除文件

时间:2014-11-06 07:04:26

标签: c# c#-3.0 putty

我正在开发一个使用C#作为编程语言的Windows应用程序。

要求是

  1. 动态登录putty
  2. 从特定位置删除旧文件
  3. 我目前正在使用下面的代码登录putty,但是我如何运行delete命令?

    string hostname = "hostname";
    string login = "login";
    string password = "password";
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.FileName = @"C:\Putty\putty.exe";
    startInfo.Arguments = string.Format("{0}@{1} -pw {2}", login, hostname, password);
    startInfo.Start();
    

    我想传递类似这样的内容

    rm myFile*.txt
    

    但在此之前,我必须通过

    导航到特定位置
    cd /dir1/dir2/NewFolder
    

    我想删除NewFolder下的所有.txt文件?

3 个答案:

答案 0 :(得分:2)

Putty具有命令行选项-m {script_file},允许您指定要针对远程服务器运行的脚本文件。运行所有命令后,putty将退出。

您可以保存命令以在脚本文件中运行,调用Putty,并在完成后删除脚本文件。

以下代码适用于我:

string hostname = "hostname";
string login = "login";
string password = "password";
string command = "rm ~/dir1/dir2/NewFolder/*.txt"; // modify this to suit your needs

const string scriptFileName = @"remote_commands.sh";
File.WriteAllText(scriptFileName, command);

var startInfo = new ProcessStartInfo();
startInfo.FileName = @"C:\Putty\putty.exe";
startInfo.Arguments = string.Format("{0}@{1} -pw {2} -m {3}", 
                                     login, hostname, password, scriptFileName);

var process = new Process {StartInfo = startInfo};
process.Start();
process.WaitForExit();

File.Delete(scriptFileName);

如果你想要做的就是向服务器发送一个命令,这个解决方案就可以了。如果您需要更多高级功能,例如阅读服务器响应,则应查看Thomas' answer

编辑:

以下是如何使用plink运行命令并获取其输出:

string hostname = "hostname";
string login = "login";
string password = "password";

var startInfo = new ProcessStartInfo();
startInfo.FileName = @"C:\Putty\plink.exe";
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardOutput = true;
startInfo.UseShellExecute = false;
startInfo.Arguments = string.Format("{0}@{1} -pw {2}",
                                        login, hostname, password);

using (var process = new Process {StartInfo = startInfo})
{
    process.Start();

    process.StandardInput.WriteLine("ls");
    process.StandardInput.WriteLine("echo 'run more commands here...'");
    process.StandardInput.WriteLine("exit"); // make sure we exit at the end

    string output = process.StandardOutput.ReadToEnd();
    Console.WriteLine(output);
}

答案 1 :(得分:1)

我不知道这是否有帮助,因为我无法正确地尝试,但它可以引导你走向正确的方向。尝试这样的事情:

string hostname = "hostname";
string login = "login";
string password = "password";
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UseShellExecute = false;
startInfo.RedirectStandardInput = true;
startInfo.FileName = @"C:\Putty\plink.exe";
startInfo.Arguments = string.Format("{0}@{1} -pw {2}", login, hostname, password);

Process p = new Process();
p.StartInfo = startInfo;
p.Start();

p.StandardInput.WriteLine("cd /dir1/dir2/NewFolder");

你应该试试'plink',这是Putty的命令行版本。使用startInfo.RedirectStandardInput指定,您可以使用p.StandardInput.WriteLine()写入流程的标准输入。这也适用于stdout,因此您可以读取该过程的输出。

答案 2 :(得分:0)

要回答你的问题,我们首先应该做一些事情:

(1)您没有登录PuTTY。您使用PuTTY建立与远程服务器的连接并启动shell。因此,您登录到服务器主机名

(2)PuTTY是一个为用户提供交互式shell的程序。它不能用作编程接口

您要查找的是SSH客户端库,例如https://sshnet.codeplex.com/(从未使用过它,在此处作为示例说明)。这些库允许您使用预定义的API

使用.NET发送命令