使用PuTTY从Windows自动运行Linux上的运行命令
我有一个场景,我需要频繁(不同的文件名)从Windows运行Linux shell命令。 我正在使用PuTTY和WinSCP来做到这一点(需要login名和密码)。 通过WinSCP将文件复制到Linux机器中的预定义文件夹中,然后从PuTTY运行该命令。 有没有一种方法可以通过程序自动执行此操作。 理想情况下,我想右击Windows中的文件,并发出将文件复制到远程机器的命令,并运行预定义的命令(在PuTTy中)与文件名作为参数。
自动login常见方法可能存在安全问题。 下面是最简单的方法之一:
- 从Windows命令行运行Putty
至于部分执行命令在putty UI中,Connection> SSH>有一个远程命令的字段。
4.17 SSH面板
SSH面板允许您configuration仅适用于SSH会话的选项。
4.17.1在服务器上执行一个特定的命令
在SSH中,您不必在服务器上运行常规shell会话。 相反,您可以select运行一个特定的命令(例如邮件用户代理)。 如果要这样做,请在“远程命令”框中input命令。 http://the.earth.li/~sgtatham/putty/0.53/htmldoc/Chapter4.html
总之,你的答案可能与下面的文字相似:
- 让Putty在远程服务器上运行命令
腻子通常带有“plink”工具。
这基本上是作为一个windows.exe执行的“ssh”命令行命令。
在“使用命令行工具plink”下的“腻子手册”中有很好的logging。
你只需要打包一个命令,如:
plink root@myserver /etc/backups/do-backup.sh
在.bat脚本中。
您可以编写一个TCL脚本并build立到该Linux机器的SSH会话并自动发出命令。 检查http://wiki.tcl.tk/11542一个简短的教程。;
您可以创build一个putty会话,并在启动会话时自动加载服务器上的脚本:
putty -load "sessionName"
在远程命令中,指向远程脚本。
码:
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/
您可以使用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资源pipe理器的“ 发送到”菜单中,这样你就可以右键单击任何文件并转到发送到>使用WinSCP上传和执行远程命令 (=快捷方式的名称)。
为此,请转到文件夹%USERPROFILE%\SendTo
并使用以下目标创build快捷方式:
winscp_path\winscp.exe /console /script=script_path\upload.txt /parameter %1
请参阅在资源pipe理器的“发送至”菜单中创build条目 。
尝试MtPutty ,你可以自动在其中的SSHlogin。 它是一个伟大的工具,特别是如果你需要多次login到多个服务器。 在这里尝试
另一个值得尝试的工具是TeraTerm 。 它真的很容易使用的SSH自动化的东西。 你可以在这里得到它。 但我最喜欢的一个总是MtPutty。
这是一个完全开箱即用的解决scheme。
- 安装AutoHotKey(ahk)
- 将脚本映射到一个键(例如F9)
-
在ahk脚本中,a)将命令(.ksh)文件发送到linux机器
b)像下面这样使用plink。 应该安装Plink,如果你有腻子。
plink会话名-l用户名-pw密码test.ksh
要么
plink -ssh example.com -l用户名-pw密码test.ksh
每当您在窗口中按F9时,所有步骤将按顺序执行。