我正在编写一些命令行操作脚本,以从Palo Alto 5060防火墙收集和解析特定的网络指标。我正在使用Plink和Windows批处理脚本。
@echo off
"C:\path\to\plink.exe" -ssh [email protected] -pw password < "C:\path\to\commands.txt >> "C:\path\to\output.txt"
commands.txt
的内容目前很简单。show interface ethernet1/1
我无法使它正常工作。我的
output.txt
具有以下结果:Last login: Tue Nov 24 15:43:13 2015 from localhost
show interface ethernet1/1Welcome user.
user@pa5060> show
[Kuser@pa5060> show interface
[Kuser@pa5060> show interface ethernet1/1
这不是正确的输出,命令的输入使我感到困惑。有没有人看过这样的东西?如果相关,此设备上会有一个登录横幅。
最佳答案
我猜想您在command.txt
的末尾缺少换行符,因此未提交命令。
至于重复的提示和[K
序列:
这仅仅是因为远程端希望在您的终端上使用交互式终端,并发送ANSI escape sequences以漂亮地打印输出。
每行可能以CR(回车)字符开头,这将导致交互式终端覆盖前一行。但这在将输出重定向到文件时不起作用。虽然如果您使用cmd.exe
在终端(type output
)上打印文件,则可能只会得到最后一行。
要使Plink不启用交互式终端,请使用 -T
command-line switch:
"C:\path\to\plink.exe" -ssh [email protected] -pw password -T < "C:\path\to\commands.txt >> "C:\path\to\output.txt"
尽管更好的方法是在PLink命令行上指定命令
"C:\path\to\plink.exe" -ssh [email protected] -pw password show interface ethernet1/1 >> "C:\path\to\output.txt"
或使用
-m
switch:"C:\path\to\plink.exe" -ssh [email protected] -pw password -m "C:\path\to\commands.txt >> "C:\path\to\output.txt"
区别在于,以这种方式指定的命令将在非交互式终端中自动执行,并且主要在“exec”通道中以受控性更高的方式自动执行,然后在重定向输入时使用的“shell”通道中自动执行。因此,您摆脱了“Last login:”消息以及命令提示符(
user@pa5060>
)等。关于ssh - Windows批处理脚本:带有Plink的SSH在输出中显示奇怪的序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33904171/