用于通过SSH连接、执行命令并将结果传递到输出文件的批处理脚本 [英] Batch script to connect via SSH, execute a command and pass the results to an OUTPUT file

查看:15
本文介绍了用于通过SSH连接、执行命令并将结果传递到输出文件的批处理脚本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我意识到这个查询很简单,互联网上有很多类似的主题,但由于某种原因,我无法完成这个主题,我已经走到了尽头。

这就是场景。批处理脚本将(使用PuTTY链接)连接到主机。它将执行命令(如检查主机版本)。该脚本将把输出带到文件中。

到目前为止,我已经配置了大部分内容--我的脚本使用包含IP的池源文件来读取它需要连接到的主机;它连接到主机;执行检查版本命令,并将结果保存到一个文件中。 但是,结果的格式不正确,我无法在输出文件中引入我希望看到的格式。

这是我的代码:

:Var
set out=E:output.txt
set src=E:servers.txt
set ver=cat /etc/*-release
set creds=-l root -pw root
set host=hostname
:Cond
for /f %%i in (%src%) do call :Cmd %%i
:Cmd
plink -ssh %1 %creds% %host%
plink -ssh %1 %creds% %ver%
echo %1 is %ver% >> %out%

结果如下:

server01Red Hat Enterprise Linux Server release 5.7 Beta (Tikanga)
server02Red Hat Enterprise Linux Server release 5.7 Beta (Tikanga)

因此,我希望将其正确格式化,例如:

server01 OS:Red Hat Enterprise Linux Server release 5.7 Beta (Tikanga)
server02 OS:Red Hat Enterprise Linux Server release 5.7 Beta (Tikanga)

甚至能够截断在主机上运行的命令的输出并仅显示其中的一部分,例如"Red Hat"。

谢谢!

推荐答案

在Linux端更容易解决您的问题,即更改脚本,使其准确显示您想要的内容。例如,您可以执行以下命令:

(hostname;echo -e "	OS:";cat /etc/issue)|sed '{:q;N;s/
//g;t q}'

这将执行主机名,回显一个制表符和"OS:",并显示/etc/Issue(您也可以使用/etc/*-Release)。最后,使用sed从结果中删除所有换行符。(您也可以使用tr " " "")

如果要使用plink执行此操作,则需要确保正确转义批处理文件中的|等字符。我没有关闭Windows计算机,但它可能如下所示:

plink -ssh %1 %creds% ^(hostname;echo -e "	OS:";cat /etc/issue^)^|sed '{:q;N;s/
//g;t q}'

我不确定我是否正确地逃脱了它。将命令存储在文件中,然后执行它会更容易。您甚至可以使用SCP上传、执行和删除脚本。

这篇关于用于通过SSH连接、执行命令并将结果传递到输出文件的批处理脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆