使用PuTTY在Windows上自动在Linux上运行命令


69

我有一种情况,我需要运行一个从窗户经常Linux shell命令(用不同的文件名)。我正在使用PuTTY和WinSCP来执行此操作(需要登录名和密码)。通过WinSCP将文件复制到linux机器中的预定义文件夹,然后从PuTTY运行命令。有没有一种方法可以使我通过程序自动执行此操作。理想情况下,我想从Windows右键单击该文件,然后发出将文件复制到远程计算机并以文件名作为参数运行预定义命令(在PuTTy中)的命令。

Answers:


33

常见的自动登录方法可能存在安全问题。以下是最简单的方法之一:

至于该部分,则执行命令。在腻子界面中,连接> SSH>中有一个用于远程命令的字段。

4.17 SSH面板

SSH面板允许您配置仅适用于SSH会话的选项。

4.17.1在服务器上执行特定命令

在SSH中,您不必在服务器上运行常规Shell会话。相反,您可以选择运行单个特定命令(例如,邮件用户代理)。如果要执行此操作,请在“远程命令”框中输入命令。 http://the.earth.li/~sgtatham/putty/0.53/htmldoc/Chapter4.html

简而言之,您的答案可能也与以下文字类似:


6
好的,所以我可以使用putty.exe -ssh -2 -l username -pw password -m c:remote.cmd hostname。非常感谢。现在我需要弄清楚命令复制文件并给参数remote.cmd
尼莫

链接不再可用
fazineroso

3
@fazineroso您对此表示反对吗?您本可以很好地询问。
加里·

命令行选项记录在“ PuTTY用户手册”中,可通过单击“ 3使用PuTTY> 3.8 PuTTY命令行> 3.8.3标准命令行选项”中的“帮助”按钮进行访问。
XP1

4
我对此投了反对票,因为此答案不能回答所提出的问题。这是一堆单词,然后是一个仅能回答问题的链接。这里还有其他答案,它们大大缩短了,并提供了答案。
Joseph Lennox

120

腻子通常带有“ 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

5
这就是答案。另外,您可以使用选美来允许加载和使用密钥,因此无需每次都输入密钥的密码。请记住,由于Windows的体系结构,因此无法防止将未加密的密钥写出到磁盘交换文件中。如果您知道一段时间内不会使用密钥,可以通过从选美中删除密钥来降低这种风险。
DDay

2
plink -i file.ppk username @ hostname path / to / directory / file.sh可以通过命令行从Windows / unix在EC2上执行脚本
Sailendra Pinupolu 16/09/14


4

您可以创建腻子会话,并在启动会话时在服务器上自动加载脚本:

putty -load "sessionName" 

在远程命令处,指向远程脚本。


每个命令行添加远程命令的参数是什么?
Radon8472

3

您可以使用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

请参阅在资源管理器的“发送到”菜单中创建条目


我很高兴看到这个问题,因为我已经在脚本中使用winscp了,腻子也很烦人
Michael St Clair 2015年

2

这是一个全新的解决方案。

  1. 安装AutoHotKey(ahk)
  2. 将脚本映射到键(例如F9)
  3. 在ahk脚本中,a)将命令(.ksh)文件传送到Linux计算机

    b)使用如下所示的plink。如果有腻子,则应安装Plink。

plink会话名-l用户名-pw密码test.ksh

要么

plink -ssh example.com -l用户名-pw密码test.ksh

每当您在窗口中按F9时,所有步骤将依次执行。


(...也许您的意思是“跳出框框思考”,因为这不只一步而已。)😉–
ashleedawg

2

码:

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/


1

尝试使用MtPutty,您可以在其中自动执行ssh登录。这是一个很棒的工具,特别是如果您需要多次登录多个服务器时。在这里尝试

另一个值得尝试的工具是TeraTerm。对于ssh自动化工具,它确实非常易于使用。你可以在这里得到。但是我最喜欢的一个总是MtPutty。


您好,我在这里的查询是,我需要在没有任何人工干预的情况下自动执行脚本,该如何做。我正在使用硒。
严苛的Nigam,2015年

-1

如果您使用的是基于密钥的身份验证,那么使用保存的Putty会话似乎非常有用,例如在远程服务器(在我的情况下为ec2)上运行shell脚本。保存的配置将负责身份验证。

C:\ Users> plink saved_putty_session_name path_to_shell_file / filename.sh

请记住,如果使用名称(user @ hostname)来保存会话,则此命令将不起作用,因为它将被视为远程命令的一部分。


加载保存的会话(适用于任何站点名称)的正确语法是plink -load name command-如@ lwpro2的答案所示。
Martin Prikryl
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.