我正在编写一些命令行操作脚本,用于从Palo Alto 5060防火墙收集和解析特定的网络指标。我正在使用Plink和Windows批处理脚本。
@echo off
"C:\path\to\plink.exe" -ssh user@1.2.3.4 -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
这不是正确的输出,命令的输入让我感到困惑。有没有人见过这样的东西?如果相关,则在此设备上有一个登录横幅。
答案 0 :(得分:1)
我猜你在command.txt
的末尾错过了一个新行,所以命令没有提交。
重复提示和[K
序列:
这只是因为远程端需要一个交互式终端,并发送ANSI escape sequences来打印输出。
每一行都可能以CR(回车)字符开头,这会导致交互式终端覆盖前一行。但是,当您将输出重定向到文件时,这不起作用。虽然如果使用cmd.exe
在终端(type output
)上打印文件,您可能只会获得最后一行。
要使Plink不启用交互式终端,请使用-T
command-line switch:
"C:\path\to\plink.exe" -ssh user@1.2.3.4 -pw password -T < "C:\path\to\commands.txt >> "C:\path\to\output.txt"
虽然更好的是在PLink命令行上指定命令
"C:\path\to\plink.exe" -ssh user@1.2.3.4 -pw password show interface ethernet1/1 >> "C:\path\to\output.txt"
或使用-m
switch:
"C:\path\to\plink.exe" -ssh user@1.2.3.4 -pw password -m "C:\path\to\commands.txt >> "C:\path\to\output.txt"
不同之处在于,以这种方式指定的命令会在非交互式终端中自动执行,主要以更加受控的方式在“exec”通道中执行,然后在重定向输入时使用的“shell”通道中执行。所以你摆脱了“上次登录:”消息以及命令提示符(user@pa5060>
)等。