我有一个场景,我需要经常从Windows运行一个 linux shell命令(使用不同的文件名)。我正在使用PuTTY和WinSCP来执行此操作(需要登录名和密码)。通过WinSCP将文件复制到linux机器中的预定义文件夹,然后从PuTTY运行该命令。有没有办法让我通过一个程序实现自动化。理想情况下,我想直接从Windows中单击该文件并发出将该文件复制到远程计算机的命令,并以文件名作为参数运行预定义命令(在PuTTy中)。
答案 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
答案 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
答案 6 :(得分:1)
尝试 MtPutty , 你可以自动在其中登录ssh。它是一个很棒的工具,特别是如果你需要多次登录多个服务器。试一试here
另一个值得尝试的工具是 TeraTerm 。它非常容易用于ssh自动化的东西。你可以得到它here。但我最喜欢的是MtPutty。
答案 7 :(得分:1)
这是一个完全开箱即用的解决方案。
在ahk脚本中, a)将命令(.ksh)文件转换为linux机器
b)使用如下所示的plink。如果你有油灰,应该安装Plink。
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)保存会话,则此命令将不起作用,因为它将被视为远程命令的一部分。