Putty – 使用C#动态删除文件
我正在开发一个使用C#作为编程语言的Windows应用程序。
要求是
- 以动态方式登录putty
- 从特定位置删除旧文件
我目前正在使用下面的代码登录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发送命令