我正在开发一个使用C#作为编程语言的Windows应用程序。
要求是
我目前正在使用下面的代码登录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
文件?
答案 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发送命令