我正在编写一些命令行操作脚本,以从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/

10-10 02:43