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

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

要求是

  1. 以动态方式登录putty
  2. 从特定位置删除旧文件

我目前正在使用下面的代码登录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文件?

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

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

编辑:

以下是如何使用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); } 

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

 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()写入进程的stdin。 这也适用于stdout,因此您可以读取进程的输出。

要回答你的问题,我们首先要说明一些事情:

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

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

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