我尝试plink.exe
从 C# 应用程序启动(PuTTY Link,PuTTY 的命令行实用程序/版本)以建立 SSH 反向隧道,但是一旦我传递了正确的参数,它就不再起作用。
这意味着什么?以下按预期工作:它打开一个命令行窗口,显示我忘记传递-pw
参数退出的密码,并显示提示。我知道它有论据,因为它特别要求我没有提供的一件事。
Uri uri = omitted;
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "cmd";
info.Arguments = "/k \"C:\\Program Files (x86)\\PuTTY\\plink.exe\" -R 3389:" + uri.Host + ":" + uri.Port + " -N -l username -pw"; // TODO pwd
Process p = Process.Start(info);
我尝试plink.exe
直接调用而不是直接调用相同的想法cmd.exe /k
,但窗口立即关闭,这对于寻找错误来说是不幸的。
但是当我在参数中传递密码时,plink.exe
显示程序帮助(显示可用参数)并退出:
Uri uri = omitted;
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "cmd";
info.Arguments = "/k \"C:\\Program Files (x86)\\PuTTY\\plink.exe\" -R 3389:" + uri.Host + ":" + uri.Port + " -N -l username -pw secretpassword";
Process p = Process.Start(info);
没有迹象表明缺少参数。cmd /k
和变体都plink.exe
不起作用(后者立即关闭,因此没有关于不同行为的信息)。
当我使用相同参数从 Windows 7 开始菜单启动器启动应用程序时,它会打开一个cmd.exe
窗口并根据请求建立连接。
怎么了?有没有办法plink.exe
注意到它没有在真正的外壳中运行?如果是,我该如何规避它,就像“开始”菜单“提示”一样?
我希望这个问题在 SO 上是正确的,因为它虽然专门针对单个应用程序,但围绕着以编程方式成功启动它。