繁体   English   中英

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

[英]Automating running command on Linux from Windows using PuTTY

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

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

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

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

4.17 SSH面板

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

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

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

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

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

putty -load "sessionName" 

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

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

您可以使用 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 Explorer 的发送到菜单中,这样您就可以右键单击任何文件和 go 到发送到 > 使用 WinSCP 上传并执行远程命令(=快捷方式的名称)。

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

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

请参阅在 Explorer 的“发送至”菜单中创建条目

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

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

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

plink sessionname -l 用户名 -pw 密码 test.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

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

试试MtPutty ,您可以在其中自动化 ssh 登录。 它是一个很棒的工具,尤其是当您需要多次登录多个服务器时。 在这里试试

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM