创建一个批处理文件或PuTTY(ssh)的快捷方式,以打开一个会话并运行命令


10

我经常发现自己打开SSH会话以运行相同的单个命令。我已经进行了所有设置,无需输入密码即可登录(通过SSH基于密钥的Auth),所以我想知道是否有一种方法可以在Windows中创建快捷方式或批处理文件来加载PuTTY或类似程序,然后启动该程序命令(如果结果良好,则有可能退出)。

Answers:


14

使用命令行的PuTTY版本plink.exe初始化与所选主机的SSH连接。使用-ssh交换机连接SSH。使用-m开关,您可以包括命令文件:

plink.exe -ssh host1 -m C:\path\to\commands.txt

您可以plink.exe这里下载

最后一步是创建一个包含plink.exe所需参数的快捷方式。

查阅Plink文档中的其他各种参数: Plink.exe文档


1
无需-m在Plink 上使用switch,因为它允许直接在其命令行上指定命令,请参阅我的答案
马丁·普里克里

我选择此答案是因为我更喜欢使用-ssh host1与腻子配置文件相对应的答案user@host
FreeSoftwareServers

@FreeSoftwareServers在这方面,PuTTY没有任何区别。您可以plink site command使用PuTTY进行相同的操作(除外command)。Plink和PuTTY具有基本相同的命令行选项集。
Martin Prikryl

8

要自动执行命令,请使用Plink(来自PuTTY软件包),而不要使用PuTTY本身。

Plink在其命令行上接受命令:

plink.exe user@host command

如果要继续使用PuTTY,则可以使用-mswitch指定命令文件(Plink也支持该-m开关)。


当我说我没有密码时,我应该指定我的意思是基于SSH密钥的Auth,但我认为可以假设。我不认为这会按原样工作,它需要在类似-i key-pw password
FreeSoftwareServers

@FreeSoftwareServers在这方面,PuTTY没有任何区别。您可以plink site command使用PuTTY进行相同的操作(除外command)。Plink和PuTTY具有基本相同的命令行选项集。
马丁·普里克里

您的答案不包括使用基于SSH密钥的身份验证(也称为PWDless)登录的选项,虽然存在正确的标志,但我在MrPowerUsers答案中包含的plink手册页中找到了它们,我知道两者都可以工作,但MrPower用户的答案适合我问题更好并且也链接了手册页
FreeSoftwareServers

6

您可以使用腻子配置来实现此目的。

加载腻子并配置会话。

在此处输入您要运行的远程命令:

腻子远程命令框

然后,在单击“ 打开 ” 之前,返回“ 会话 ”选项卡(在顶部),然后保存您的配置。

现在,创建的快捷方式putty.exe,添加-load标志,例如:

%PATH_TO_PUTTY%\putty.exe -load my_config

现在,您只需单击快捷方式,它将加载您的会话并执行命令。


看起来很棒,明天测试会很糟糕,我想我只是执行一个脚本,它就可以根据脚本的结果结束会话
FreeSoftwareServers

是的,会话将在命令终止时结束。如果您希望PuTTY完成后保持挂起状态(例如:检查输出),请在“ 会话 ”标签中设置“ 退出时关闭窗口 ”。
Attie

2

如果您使用的是Windows 10,则您可能想知道Microsoft 据报道具有Beta版的OpenSSH(客户端和服务器):

[…]转到“管理可选功能”,然后转到“添加功能”。然后,您可以向下滚动列表,在Windows中找到OpenSSH客户端(测试版)和OpenSSH服务器(测试版)功能。在Windows上运行另一个远程服务的想法可能令人生畏,因此如果您不想安装服务器,我们也不会怪您。

安装完成后,您只需启动命令行并使用ssh,然后键入,即可使用OpenSSH客户端ssh ubuntu@someIP

这是ssh我们通过Windows OpenSSH Client获得的当前(截至2017年11月28日)命令使用指南:

C:\WINDOWS\system32>ssh
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
           [-F configfile] [-I pkcs11] [-i identity_file]
           [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]
           [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
           [user@]hostname [command]
C:\WINDOWS\system32>

如果这可行,那么您应该可以ssh像在* Nix上那样使用:

C:\WINDOWS\system32>ssh user@host "ls -l ~"

知道的确很酷,但是我喜欢SuperPuTTY。我还将密切关注Windows OpenSSH。
FreeSoftwareServers

您需要在要远程处理的计算机上安装ssh客户端吗?我问,因为我进入的某些计算机不是
Windows10。– Nelda.techspiress

1
@ Nelda.techspiress您只需要在登录的计算机上运行服务器而在从其登录的计算机上仅需要客户端(相应地,如果您登录到一台计算机作为代理跳入另一台计算机,则该中间计算机将同时需要这两者。)
Michael-Clay Shirky的位置

2

只是以为我会插入我编写的脚本,希望可以节省一些人的语法和手册页研究时间

a)SingleIP,IP范围或IPList文件

b)在IP /范围上运行的脚本名称(实际的UNIX sh / ksh类型脚本)

c)(可选)对端口22打开进行nmap扫描(即,某些非Linux机器的子网)

-想要避免腻子无法连接的IP,避免脚本能够正常继续

d)(可选)运行pscp命令自动缓存主机密钥(putty不会自动执行此操作)

该批次假定:

1.您已经在C:\ Program Files \ PuTTY \中安装了完整的PuTTY软件包和SSH密钥

2.安装在C:\ Program Files \ PuTTY \ scripts \中的批处理/脚本/ IPlist文件

3. NMAP和PuTTY工作目录在您的命令路径中

https://www.harmonyhit.com/PuttyBatch.bat

这对于跨多个计算机使用单个脚本(例如更新SSL证书)最有用。

这是完整的批处理文件:

@回声关闭

rem您必须修改CACHEKEY和SCRIPT部分以反映您的SSH密钥位置

设置IPFILE = IPList_temp.txt
设置runagain = n
设置OPTION = 1
设置RANGE =
设置IP =
设置SCAN = n
设置KEYCACHE = n

:选项
CLS
回声(工作目录设置为C:\ Program Files \ PuTTY \ scripts \)
回声。 
回声1.单个IP
ECHO 2. IP列表文件
ECHO 3. IP范围
回声。
设置/ p OPTION =“选择IP类型:”
如果%OPTION%== 3转到IPRANGE
如果%OPTION%== 2转到IPLIST
如果%OPTION%== 1转到单行
回声请选择一个有效的选项
转到选项

:IPRANGE
回声输入IP范围,如以下示例所示。在多个范围之间使用空格:
回声即“ 10.21.0.15-99 10.21.1.15-100”
设置/ p RANGE =输入范围: 
回声%RANGE%>%IPFILE%
转到脚本名称

:单身
设置/ p IP =输入IP:
回声%IP%>%IPFILE%
转到脚本名称

:IP列表
设置/ p IP =输入IPList文件名:
复制/ Y%IP%%IPFILE%
转到脚本名称

:SCRIPTNAME
set / p SCRIPT =输入脚本名称:
如果不存在%SCRIPT%(
echo文件名不存在!
转到脚本名称)

回声。
设置/ p SCAN =是否先扫描Nmap?(推荐的):
如果%SCAN%== n GOTO:RUNCACHE

rem检查IP类型是否为“范围”,因为nmap无法从文件读取IP范围,必须直接在nmap命令中键入
如果%OPTION%== 3转到NMAPRANGE 
:NMAP
回显22端口的扫描IP打开...
nmap --open -n -p22 -iL%IPFILE%-oG-| findstr / E向上> nmap_temp.txt
转到AFTERNMAP

:NMAPRANGE
回显22端口的扫描IP打开...
nmap --open -n -p22%RANGE%-oG-| findstr / E向上> nmap_temp.txt

:AFTERNMAP
回声完成
rem nmap格式不正确,以下内容删除了多余的信息
为(nmap_temp.txt)中的/ f“ tokens = 2” %% A做回声%% A >> nmap_temp2.​​txt
rem删除IP末尾的隐藏空间(要求“ repl”在批处理文件目录中)
键入“ nmap_temp2.​​txt” | 重复“”“”>%IPFILE%

:RUNCACHE
设置/ p KEYCACHE =扫描并缓存SSH密钥(y / n)?
如果%KEYCACHE%== n转到脚本

:CACHEKEY
rem运行所有IP以缓存SSH主机密钥(如果尚未缓存)
/ F“令牌= *”(%IPFILE%)中的%% A做(echo y |“ C:\ Program Files \ PuTTY \ pscp.exe” -l root -i“ C:\ Program Files \ PuTTY \ SSH .ppk“ -touch %% A:/ tmp / test)

:脚本
为/ F“令牌= 1”(%IPFILE%)中的%% A做(“ C:\ Program Files \ PuTTY \ putty.exe” -ssh %% A -t -l root -i“ C:\ Program Files \ PuTTY \ SSH.ppk“ -m” C:\ Program Files \ PuTTY \ scripts \%SCRIPT%“)
是否存在nmap_temp.txt(del nmap_temp.txt)
如果存在nmap_temp2.​​txt(del nmap_temp2.​​txt)
设置/ p runagain =“按Enter键完成,或按y重新运行”
如果%runagain%== y转到选项

1
只对链接答案不满意,如果您的网站出现故障怎么办?如果您想贡献,请在此处共享脚本。欢迎您在此处将源代码/链接与代码一起发布到网站,但是答案应该是独立的,不需要以下链接。
FreeSoftwareServers

1
批量粘贴的内容
Todd Porter

不要“自动缓存”主机密钥。验证主机密钥是保护SSH会话不可或缺的一部分。PuTTY(及其工具)不会要求您提供主机密钥来娱乐或骚扰您。这是有原因的!+你也应该不会存储用户数据(SSH.ppk和脚本) to 程序Files`文件夹。
马丁Prikryl

您是否可以推荐没有该脚本如何跨多个IP运行脚本?a)这对于典型的用户桌面而言并不意味着,对于更多具有安全性的管理服务器来说,更多的是谁可以访问服务器b)安全风险到底是什么?缓存主机密钥是可选的,并且在整个范围内只能进行一次。如果您再次运行脚本而不缓存密钥,您仍然会看到并托管密钥更改,脚本将无法继续运行...
Todd Porter19年

......在钥匙上达成一致。我指向共享文件夹所在的NAS上的共享文件夹,只有我可以访问该共享文件夹。我刚刚选择了一条路,因为其他用户将有所不同
Todd Porter

1

您还可以查看诸如mRemoteNG,MOBAxTerm或SecureCRT之类的软件,它们将为您管理SSH连接,这也与保存的PuTTY会话链接,因此您可以将模板应用于该会话。


0

这是最终的“ CMD”,我可以将其保存在FileServer上并在桌面上创建快捷方式。

::FreeSoftwareServers
::Automated Opening of SSH Tunnel & Execute CMD on Remote Host
::/superuser/1278434/create-a-batch-file-or-shortcut-to-putty-ssh-that-opens-a-session-and-runs-a-c

set puttydir="C:\Program Files\PuTTY"
set exe=plink.exe
::Profile must exist in PuTTY
set remotehost=FileServer
set remotecmd="chmod 777 /mnt/mdadm/torrents -R"

cd %puttydir% 

%exe% %remotehost% %remotecmd%

::Test First Manually in CMD Prompt
::Note Remote Host does NOT have access to BashRC Alias's
::start "C:\Program Files\PuTTY\" plink.exe -ssh FileServer touch /tmp/testfile
::start "C:\Program Files\PuTTY\" plink.exe -ssh FileServer ~/script.sh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.