Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PuTTY从Windows在Linux上自动运行命令_Linux_Windows_Automation_Putty - Fatal编程技术网

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

使用PuTTY从Windows在Linux上自动运行命令,linux,windows,automation,putty,Linux,Windows,Automation,Putty,我有一个场景,需要从windows频繁运行linux shell命令(使用不同的文件名)。我正在使用PuTTY和WinSCP来实现这一点(需要登录名和密码)。该文件通过WinSCP复制到linux机器中的预定义文件夹,然后从PuTTY运行该命令。有没有一种方法可以让我通过一个程序来实现自动化。理想情况下,我希望右键单击windows中的文件并发出命令,该命令将文件复制到远程计算机,并以文件名作为参数运行预定义命令(PuTTy)。您可以编写TCL脚本并建立到该Linux计算机的SSH会话,并自动发

我有一个场景,需要从windows频繁运行linux shell命令(使用不同的文件名)。我正在使用PuTTY和WinSCP来实现这一点(需要登录名和密码)。该文件通过WinSCP复制到linux机器中的预定义文件夹,然后从PuTTY运行该命令。有没有一种方法可以让我通过一个程序来实现自动化。理想情况下,我希望右键单击windows中的文件并发出命令,该命令将文件复制到远程计算机,并以文件名作为参数运行预定义命令(PuTTy)。

您可以编写TCL脚本并建立到该Linux计算机的SSH会话,并自动发出命令。查看简短的教程。

腻子通常与“plink”实用程序一起提供。
这实际上是作为windows.exe实现的“ssh”命令行命令。
它在putty手册的“使用命令行工具plink”中有很好的记录

您只需要包装一个命令,如下所示:

plink root@myserver /etc/backups/do-backup.sh
在.bat脚本中

您还可以使用常见的shell构造(如分号)来执行多个命令。e、 g:

plink read@myhost ls -lrt /home/read/files;/etc/backups/do-backup.sh

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

至于执行命令的部分 在putty UI中,Connection>SSH>有一个用于远程命令的字段

4.17 SSH面板

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

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

在SSH中,您不必运行 服务器上的常规shell会话。 相反,您可以选择运行 单个特定命令(例如 例如,邮件用户代理)。如果你 要执行此操作,请在中输入命令 “远程命令”框。

简而言之,您的答案可能与下面的文本相似:


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

putty -load "sessionName" 
在远程命令中,指向远程脚本。

您可以使用WinSCP执行这两项任务(上载和命令执行)。使用WinSCP脚本,如:

option batch abort
option confirm off
open your_session
put %1%
call script.sh
exit
winscp.exe /console /script=script_path\upload.txt /parameter file_to_upload.dat
调用
命令的参考:

%1%
语法的参考:

然后,您可以像这样运行脚本:

option batch abort
option confirm off
open your_session
put %1%
call script.sh
exit
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

请参阅。

尝试使用油灰, 您可以在其中自动执行ssh登录。这是一个很棒的工具,尤其是当你需要多次登录多个服务器时。试试看


另一个值得尝试的工具是TeraTerm。对于ssh自动化的东西来说,它真的很容易使用。你可以得到它。但我最喜欢的是MtPutty。

这里有一个完全现成的解决方案

  • 安装自动热键(ahk)
  • 将脚本映射到键(例如F9)
  • 在ahk脚本中, a) 将命令(.ksh)文件Ftp到linux计算机

    b) 使用下面的plink。如果有油灰,则应安装底座

  • plink会话名称-l用户名-pw密码测试.ksh

    plink-ssh example.com-l username-pw password test.ksh

    只要在windows中按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


    链接:

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

    C:\Users>plink保存的\u putty\u会话\u名称路径\u到\u shell\u文件/filename.sh


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

    好,因此我可以使用
    putty.exe-ssh-2-l username-pw password-m c:remote.cmd hostname
    。谢谢。现在,我需要找出复制文件的命令,并为remote.cmd提供参数。这些链接不再存在available@fazineroso你为什么投反对票?你可以问得很好。PuTTY用户手册中记录了命令行选项,可以通过单击帮助按钮访问该手册,在3中使用PuTTY>3.8 PuTTY命令行>3.8.3标准命令行选项。我投了反对票,因为这个答案没有回答所问的问题。这是一堆单词,然后是一个链接,它只能回答这个问题。这里还有其他答案,这些答案非常简短,并且提供了一个答案。嗨,我的问题是,我需要在没有任何人工干预的情况下自动执行脚本,如何做到这一点。我在用硒,这就是答案。此外,您可以使用pageant来允许加载和使用密钥,因此无需每次输入密钥的密码短语。请记住,由于Windows的体系结构,无法阻止将未加密的密钥写入磁盘交换文件。如果您知道您的密钥在一段时间内不会被使用,您可以通过从pageant中删除密钥来降低此风险。plink-i file.ppkusername@hostnamepath/to/directory/file.sh通过命令行从windows/unix在EC2上执行脚本我很高兴看到了这一点,因为我已经在脚本中使用了winscp,putty正在干扰正确的语法加载保存的会话(可与任何站点名称一起使用)是
    plink-load name command
    ——如@lwpro2的回答所示。(…也许你的意思是,因为这是多个步骤。)每个命令行添加远程命令的参数是什么?