我有一种情况,我需要运行一个从窗户经常Linux shell命令(用不同的文件名)。我正在使用PuTTY和WinSCP来执行此操作(需要登录名和密码)。通过WinSCP将文件复制到linux机器中的预定义文件夹,然后从PuTTY运行命令。有没有一种方法可以使我通过程序自动执行此操作。理想情况下,我想从Windows右键单击该文件,然后发出将文件复制到远程计算机并以文件名作为参数运行预定义命令(在PuTTy中)的命令。
Answers:
常见的自动登录方法可能存在安全问题。以下是最简单的方法之一:
至于该部分,则执行命令。在腻子界面中,连接> SSH>中有一个用于远程命令的字段。
4.17 SSH面板
SSH面板允许您配置仅适用于SSH会话的选项。
4.17.1在服务器上执行特定命令
在SSH中,您不必在服务器上运行常规Shell会话。相反,您可以选择运行单个特定命令(例如,邮件用户代理)。如果要执行此操作,请在“远程命令”框中输入命令。 http://the.earth.li/~sgtatham/putty/0.53/htmldoc/Chapter4.html
简而言之,您的答案可能也与以下文字类似:
腻子通常带有“ plink”实用程序。
本质上,这是实现为Windows .exe的“ ssh”命令行命令。
腻子手册中“使用命令行工具plink”下的文档对此做了很好的记录。
您只需要包装如下命令:
plink root@myserver /etc/backups/do-backup.sh
在.bat脚本中。
您还可以使用常见的shell构造(例如分号)来执行多个命令。例如:
plink read@myhost ls -lrt /home/read/files;/etc/backups/do-backup.sh
您可以编写一个TCL脚本并与该Linux计算机建立SSH会话并自动发出命令。请访问http://wiki.tcl.tk/11542,以获取简短的教程。
您可以使用WinSCP完成两个任务(上传和命令执行)。使用WinSCP脚本,例如:
option batch abort
option confirm off
open your_session
put %1%
call script.sh
exit
call
命令参考:https :
//winscp.net/eng/docs/scriptcommand_call
%1%
语法参考:https :
//winscp.net/eng/docs/scripting#syntax
然后,您可以像运行脚本:
winscp.exe /console /script=script_path\upload.txt /parameter file_to_upload.dat
实际上,您可以将上述命令的快捷方式放在Windows资源管理器的“发送至”菜单中,以便您可以右键单击任何文件,然后转到“发送至”>“使用WinSCP和执行远程命令”(=快捷方式的名称) )。
为此,请转到文件夹%USERPROFILE%\SendTo
并使用以下目标创建快捷方式:
winscp_path\winscp.exe /console /script=script_path\upload.txt /parameter %1
这是一个全新的解决方案。
在ahk脚本中,a)将命令(.ksh)文件传送到Linux计算机
b)使用如下所示的plink。如果有腻子,则应安装Plink。
plink会话名-l用户名-pw密码test.ksh
要么
plink -ssh example.com -l用户名-pw密码test.ksh
每当您在窗口中按F9时,所有步骤将依次执行。
码:
using System;
using System.Diagnostics;
namespace playSound
{
class Program
{
public static void Main(string[] args)
{
Console.WriteLine(args[0]);
Process amixerMediaProcess = new Process();
amixerMediaProcess.StartInfo.CreateNoWindow = false;
amixerMediaProcess.StartInfo.UseShellExecute = false;
amixerMediaProcess.StartInfo.ErrorDialog = false;
amixerMediaProcess.StartInfo.RedirectStandardOutput = false;
amixerMediaProcess.StartInfo.RedirectStandardInput = false;
amixerMediaProcess.StartInfo.RedirectStandardError = false;
amixerMediaProcess.EnableRaisingEvents = true;
amixerMediaProcess.StartInfo.Arguments = string.Format("{0}","-ssh username@"+args[0]+" -pw password -m commands.txt");
amixerMediaProcess.StartInfo.FileName = "plink.exe";
amixerMediaProcess.Start();
Console.Write("Presskey to continue . . . ");
Console.ReadKey(true);
}
}
}
示例commands.txt:
ps
链接:https://huseyincakir.wordpress.com/2015/08/27/send-commands-to-a-remote-device-over-puttyssh-putty-send-command-from-command-line/
如果您使用的是基于密钥的身份验证,那么使用保存的Putty会话似乎非常有用,例如在远程服务器(在我的情况下为ec2)上运行shell脚本。保存的配置将负责身份验证。
C:\ Users> plink saved_putty_session_name path_to_shell_file / filename.sh
请记住,如果使用名称(user @ hostname)来保存会话,则此命令将不起作用,因为它将被视为远程命令的一部分。
plink -load name command
-如@ lwpro2的答案所示。
putty.exe -ssh -2 -l username -pw password -m c:remote.cmd hostname
。非常感谢。现在我需要弄清楚命令复制文件并给参数remote.cmd