Windows 批处理脚本:使用 Plink 的 SSH 在输出中显示奇怪的序列
Windows batch scripting: SSH with Plink showing strange sequences in output
我正在编写一些命令行操作脚本,用于从 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
这不是正确的输出,命令的输入让我感到困惑。有人见过这样的东西吗?如果相关,此设备上有一个登录横幅。
我猜你在 command.txt
末尾少了一个换行符,所以命令没有提交。
至于重复提示和[K
顺序:
这仅仅是因为远程端希望您端有一个交互式终端,并发送 ANSI escape sequences 来漂亮地打印输出。
每一行都可能以 CR(回车 return)字符开头,这会导致交互式终端覆盖前一行。但这不起作用,当您将输出重定向到文件时。尽管如果您使用 type output
在终端 (cmd.exe
) 上打印文件,您可能只会得到最后一行。
要使 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"频道中你是重定向输入时使用。因此,您摆脱了 "Last login:" 消息以及命令提示符 (user@pa5060>
) 等。
我正在编写一些命令行操作脚本,用于从 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
这不是正确的输出,命令的输入让我感到困惑。有人见过这样的东西吗?如果相关,此设备上有一个登录横幅。
我猜你在 command.txt
末尾少了一个换行符,所以命令没有提交。
至于重复提示和[K
顺序:
这仅仅是因为远程端希望您端有一个交互式终端,并发送 ANSI escape sequences 来漂亮地打印输出。
每一行都可能以 CR(回车 return)字符开头,这会导致交互式终端覆盖前一行。但这不起作用,当您将输出重定向到文件时。尽管如果您使用 type output
在终端 (cmd.exe
) 上打印文件,您可能只会得到最后一行。
要使 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"频道中你是重定向输入时使用。因此,您摆脱了 "Last login:" 消息以及命令提示符 (user@pa5060>
) 等。