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

时间:2011-05-27 02:24:38

标签: linux windows automation putty

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

9 个答案:

答案 0 :(得分:111)

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

您只需要包含如下命令:

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

答案 1 :(得分:28)

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

至于执行命令的部分 在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

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

答案 2 :(得分:4)

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

答案 3 :(得分:3)

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

putty -load "sessionName" 

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

答案 4 :(得分: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资源管理器的发送到菜单中,这样您就可以右键单击任何文件并转到发送到&gt ;使用WinSCP和执行远程命令上传(=快捷方式的名称)。

为此,请转到文件夹%USERPROFILE%\SendTo并使用以下目标创建快捷方式:

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

请参阅Creating entry in Explorer's "Send To" menu

答案 5 :(得分: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/

答案 6 :(得分:1)

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

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

答案 7 :(得分:1)

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

  1. 安装AutoHotKey(ahk)
  2. 将脚本映射到密钥(例如F9)
  3. 在ahk脚本中, a)将命令(.ksh)文件转换为linux机器

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

  4.   

    plink sessionname -l username -pw password test.ksh

      

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

    只要在Windows中按F9,所有步骤都将按顺序执行。

答案 8 :(得分:0)

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

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

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