【问题标题】:Automating running command on Linux from Windows using PuTTY使用 PuTTY 在 Windows 上自动运行 Linux 上的命令
【发布时间】:2011-09-03 01:59:03
【问题描述】:

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

【问题讨论】:

    标签: linux windows automation putty


    【解决方案1】:

    Putty通常带有“plink”实用程序。
    这本质上是作为 windows .exe 实现的“ssh”命令行命令。
    它很好地记录在“使用命令行工具 plink”下的 putty 手册中。

    你只需要像这样包装一个命令:

    plink root@myserver /etc/backups/do-backup.sh
    

    在 .bat 脚本中。

    您还可以使用常见的 shell 结构,例如分号来执行多个命令。例如:

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

    【讨论】:

    • 这就是答案。此外,您可以使用 pageant 来允许加载和使用密钥,因此无需每次都输入密钥的密码。请记住,由于 Windows 的体系结构,无法阻止未加密的密钥被写入磁盘交换文件。如果您知道密钥在一段时间内不会被使用,您可以通过将密钥从选美中移除来降低这种风险。
    • plink -i file.ppk username@hostname path/to/directory/file.sh 通过命令行从 windows/unix 在 EC2 上执行脚本
    【解决方案2】:

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

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

    4.17 SSH 面板

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

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

    在 SSH 中,您不必运行 服务器上的一般 shell 会话。 相反,您可以选择运行 单个特定命令(例如 邮件用户代理,例如)。如果你 想要这样做,输入命令 “远程命令”框。 http://the.earth.li/~sgtatham/putty/0.53/htmldoc/Chapter4.html

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

    【讨论】:

    • 好的,我可以使用putty.exe -ssh -2 -l username -pw password -m c:remote.cmd hostname。非常感谢。现在我需要弄清楚复制文件并为 remote.cmd 提供参数的命令
    • 链接不再可用
    • @fazineroso 你为什么反对?你本来可以好好问的。
    • 命令行选项记录在 PuTTY 用户手册中,可以通过单击帮助按钮访问,在 3 使用 PuTTY > 3.8 PuTTY 命令行 > 3.8.3 标准命令行选项.
    • 我投了反对票,因为这个答案没有回答所提出的问题。这是一堆单词,然后是一个只能回答问题的链接。这里还有其他答案要短得多并提供答案。
    【解决方案3】:

    您可以编写 TCL 脚本并与该 Linux 机器建立 SSH 会话并自动发出命令。查看http://wiki.tcl.tk/11542 获取简短教程。

    【讨论】:

      【解决方案4】:

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

      putty -load "sessionName" 
      

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

      【讨论】:

      • 每个命令行添加远程命令的参数是什么?
      【解决方案5】:

      您可以使用 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 资源管理器的 Send To 菜单中,这样您就可以右键单击任何文件并转到 Send To >使用 WinSCP 上传并执行远程命令(=快捷方式的名称)。

      为此,转到文件夹%USERPROFILE%\SendTo 并创建一个具有以下目标的快捷方式:

      winscp_path\winscp.exe /console /script=script_path\upload.txt /parameter %1
      

      见Creating entry in Explorer's "Send To" menu。

      【讨论】:

      • 我很高兴看到这个,因为我已经在我的脚本中使用了winscp,而腻子很烦人
      【解决方案6】:

      这是一个完全开箱即用的解决方案。

      1. 安装 AutoHotKey (ahk)
      2. 将脚本映射到一个键(例如 F9)
      3. 在 ahk 脚本中, a) 将命令 (.ksh) 文件 Ftp 到 linux 机器

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

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

      或

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

      在 windows 中按 F9 时,所有步骤都会按顺序执行。

      【讨论】:

      【解决方案7】:

      代码:

      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);
          }
      }
      

      }

      示例命令.txt:

      ps

      链接:https://huseyincakir.wordpress.com/2015/08/27/send-commands-to-a-remote-device-over-puttyssh-putty-send-command-from-command-line/

      【讨论】:

        【解决方案8】:

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

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

        【讨论】:

        • 您好,我的疑问是我需要在没有任何人工干预的情况下自动执行脚本,如何做到这一点。我正在使用硒。
        【解决方案9】:

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

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

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

        【讨论】:

        • 加载已保存会话(适用于任何站点名称)的正确语法是plink -load name command -- 正如@lwpro2 的答案中已经显示的那样。
        猜你喜欢
        • 2017-06-24
        • 2013-03-25
        • 1970-01-01
        • 2018-04-22
        • 2017-07-06
        • 2012-09-14
        • 1970-01-01
        • 2017-01-14
        相关资源
        最近更新 更多