我已经对此批处理文件的早期部分提供了一些帮助,但现在我遇到了最终组件的问题。 我尝试了一些没有成功的事情。我尝试将CRLF更改为LF,它什么也没做。我也试过用几种方法重新命名命令,但我仍然没有到达任何地方。以下是我的主要批处理文件。
@echo on
REM delete deauth command file
SET OutFile="C:\temp\Out2.txt"
IF EXIST "%OutFile%" DEL "%OutFile%"
plink -v -ssh *@x.x.x.x -pw PW -m "c:\temp\WirelessDump.txt" > "C:\temp\output.txt"
setlocal
for /f %%a in (C:\temp\output.txt) do >> "Out2.txt" echo wir cli mac-address %%a deauth forced
REM Use commands in out2 to deauth
plink -v -ssh *@x.x.x.x -pw PW -m "c:\temp\Out2.txt"
pause
在这句话下面是Out2
中找到的命令,我认为它给出了实际的麻烦。线条数量各不相同,但只是使用不同的MAC,它们都是这个特殊的命令。
wir cli mac-address xxxx.xxxx.xxxx deauth forced
如果Out2
只有一行,则运行正常,没有问题。但是当有多行时,它会失败并显示一条错误,指出Line有一个无效的自动命令。它几乎就像是把它作为一个连续的命令一样读出来的。正如我上面提到的,我从CRLF改为LF希望IOS希望它更好,但是失败了。我尝试在命令之间添加额外的行,并且我每次都尝试从该文件调用登录。
我希望有一种方法可以定制命令,一次一个地传递所有行,以便将其保持在最小的文件中。
我有另一个想法,但它有点/非常笨重。如果有办法将每个MAC deauth命令输出到saperate文件夹(out1,out2,out3)中的自己的文件,并让BAT能够运行该文件夹中所有随机生成的文件,以便每个文件都是分开的plink会话。
如果我需要更改/添加/详细说明任何内容,请告诉我。提前感谢你们愿意帮助的任何事情。我很感激。
编辑: Martin已经指出了实际的限制。思科通过SSH接受命令块似乎是一种限制。所以我仍然有同样的问题,我只是需要一些帮助来解决这个问题的解决方法。我认为上面提到的多文件解决方案可能有一定的可能性。但是,我知道如何做到这一点,我是一个太多的菜鸟。如果我有任何突破,我会更新。感谢您的贡献!
答案 0 :(得分:1)
它实际上是Cisco的一个已知限制,它不支持SSH中的多个命令" exec"频道命令。
引用PuTTY / Plink手册的3.8.3.6 -m
: read a remote command or script from a file部分:
对于某些服务器(特别是Unix系统),您甚至可以在此文件中放置多行,并按顺序执行多个命令,或者整个shell脚本;但这可以说是一种滥用,并且无法在所有服务器上运行。 特别是,已知不与某些“嵌入式”服务器(例如Cisco路由器)配合使用。
答案 1 :(得分:1)
这不使用cmd.exe并使用文件:
function Invoke-PlinkCommandsIOS {
param (
[Parameter(Mandatory=$true)][string] $Host,
[Parameter(Mandatory=$true)][System.Management.Automation.PSCredential] $Credential,
[Parameter(Mandatory=$true)][string] $Commands,
[Switch] $ConnectOnceToAcceptHostKey = $false
)
$PlinkPath="$PSScriptRoot\plink.exe"
$commands | & "$PSScriptRoot\plink.exe" -ssh -2 -l $Credential.GetNetworkCredential().username -pw "$($Credential.GetNetworkCredential().password)" $Host -batch
}
用法:不要忘记你的退出和终端长度为0或它将挂起
PS C:\> $Command = "terminal lenght 0
>> show running-config
>> exit
>> "
>>
PS C:\> Invoke-PlinkCommandsIOS -Host ace-dc1 -Credential $cred -Commands $Command
...
答案 2 :(得分:0)
听起来像你的文件' Out2.txt'只有LF在行尾。将其转换为CRLF的简单方法是使用MORE命令并将输出重定向到新文件,然后使用新文件。
more Out2.txt > Out2CRLF.txt
答案 3 :(得分:0)
当尝试通过powershell中的plink在ASA上提取ASA的完整ACL列表时,我遇到了相同的问题。
基本上,由于文档https://the.earth.li/~sgtatham/putty/0.72/htmldoc/Chapter3.html#using-cmdline-m中引用的滥用问题,在提取ACL时出现不一致的结果。有时我会得到0,有时只有1或2,有时我会得到所有。 (我个人的成功率约为五分之一。)
由于我偶尔会成功,所以我使用了while循环来捕获失败的尝试并重试。只需确保在while循环上放置一些时间,以防止它过多地向ssh连接发送垃圾邮件。
这不是一个好的解决方案,但它是不得已的方法。