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

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

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

答案1

使用命令行 PuTTY 版本plink.exe启动与所选主机的 SSH 连接。使用-ssh开关连接 SSH。使用-m开关可以包含命令文件:

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

您可以plink.exe从下载这里。

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

查看 Plink 文档以了解其他各种参数: Plink.exe 文档

答案2

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

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

plink.exe user@host command

如果您想继续使用 PuTTY,可以使用-m转变指定命令文件(Plink-m也支持开关)。

答案3

您可以使用 putty 配置来实现这一点。

加载腻子并配置您的会话。

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

Putty 远程命令框

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

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

%PATH_TO_PUTTY%\putty.exe -load my_config

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

答案4

这是我写的剧本希望能节省一些人数小时的语法和man页面研究时间。

  1. SingleIP、IP Range 或 IPList 文件
  2. 在 IP/范围上运行的脚本名称(实际 Unix sh/ksh类型脚本)
  3. 可选择nmap扫描端口 22 是否开放(即包含某些非 Linux 机器的子网)
    • 希望避免 Putty 无法连接的 IP,从而避免脚本能够正常继续运行
  4. 可选择运行pscp命令来自动缓存主机密钥(PuTTY 不会自动执行此操作)

此批次假设:

  1. 您已安装完整的 PuTTY 软件包和 SSH 密钥C:\Program Files\PuTTY\
  2. 批处理脚本和 IPlist 文件安装在C:\Program Files\PuTTY\scripts\
  3. 和 PuTTY 工作目录nmap位于您的命令路径中

这对于在多台机器上使用单个脚本(例如更新 SSL 证书)非常有用。

这是完整的批处理文件:

@ECHO OFF

rem  You must modify the CACHEKEY and SCRIPT section to reflect your SSH key location

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

:OPTION
CLS
ECHO (Working directory is set to C:\Program Files\PuTTY\scripts\)
ECHO. 
ECHO 1. Single IP
ECHO 2. IP list file
ECHO 3. IP Range
ECHO.
set /p OPTION="Choose IP type:"
IF %OPTION%==3 GOTO IPRANGE
IF %OPTION%==2 GOTO IPLIST
IF %OPTION%==1 GOTO SINGLEIP
echo Please select a valid option
GOTO OPTION

:IPRANGE
ECHO Enter the IP range(s) as in the following example. Use a space between multiple ranges:
ECHO       i.e. "10.21.0.15-99 10.21.1.15-100"
set /p RANGE=Enter Range: 
echo %RANGE% > %IPFILE%
GOTO SCRIPTNAME

:SINGLEIP
set /p IP=Enter IP:
echo %IP% > %IPFILE%
GOTO SCRIPTNAME

:IPLIST
set /p IP=Enter IPList filename:
copy /Y %IP% %IPFILE%
GOTO SCRIPTNAME

:SCRIPTNAME
set /p SCRIPT=Enter script name:
if not exist %SCRIPT% (
echo filename does not exist!
GOTO SCRIPTNAME )

ECHO.
set /p SCAN=Do Nmap scan first? (recommended):
if %SCAN%==n GOTO :RUNCACHE

rem Check whether IP type is "range" as nmap cannot read an IP range from file and must be type directly in nmap command
IF %OPTION%==3 GOTO NMAPRANGE 
:NMAP
echo Scanning IPs for port 22 open...
nmap --open -n -p22 -iL %IPFILE% -oG - | findstr /E Up > nmap_temp.txt
GOTO AFTERNMAP

:NMAPRANGE
echo Scanning IPs for port 22 open...
nmap --open -n -p22 %RANGE% -oG - | findstr /E Up > nmap_temp.txt

:AFTERNMAP
echo DONE
rem     nmap formatting is not correct, the following removes extra info
for /f "tokens=2" %%A in (nmap_temp.txt) do echo %%A >> nmap_temp2.txt
rem remove hidden space at end of IP (requires "repl" be in the batch file directory)
type "nmap_temp2.txt" | repl " " "" > %IPFILE%

:RUNCACHE
set /p KEYCACHE=Scan and cache SSH key (y/n) ?
if %KEYCACHE%==n GOTO SCRIPT

:CACHEKEY
rem Run through all IPs to cache the SSH Host Key if not already cached
for /F "tokens=*" %%A in (%IPFILE%) do ( echo y | "C:\Program Files\PuTTY\pscp.exe" -l root -i "C:\Program Files\PuTTY\SSH.ppk" -touch %%A:/tmp/test )

:SCRIPT
for /F "tokens=1" %%A in (%IPFILE%) do ( "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%" )
if exist nmap_temp.txt (del nmap_temp.txt)
if exist nmap_temp2.txt (del nmap_temp2.txt)
set /p runagain="Press Enter to Finish or y to rerun"
if %runagain%==y GOTO OPTION

相关内容