linux - 单元(cisco)上的 bash 脚本远程 ssh ping 结果有一半响应
问题描述
我正在尝试通过 ssh 捕获/管道来自远程 cisco 路由器的 ping 响应(请参阅脚本)。一切正常,但仅在 ping 管道破裂时“!” 来自路由器目的地的 ping 响应:
routername#ping xxx.xxx.xxx.xxx source loopback xx
Type escape sequence to abort.Sending 5, 100-byte ICMP Echos to xxx.xxx.xxx.xxx, timeout is 2 seconds:
Packet sent with a source address of xxx.xxx.xxx.xxx
!
仅此而已……它似乎在第一个“!”之后就中断了。
这在哪里运作良好并捕获并返回整个 ping 结果:
ssh "user@$1" 'ping xxx.xxx.xxx.xxx source loopback xx' > log
ssh user@$1 "ping xxx.xxx.xxx.xxx source loopback xx" | tee -a log
但仅作为单行命令。我能做些什么来捕捉整个输出直到结束?
我的脚本:
#!/bin/bash
echo "$1"
var1=$(ssh user@$1 << "ENDSSH"
sh version | incl System image file
sh ip interface INTx | incl MTU
show controllers VDx | incl Speed
sh cellular 0 radio | include RSS
sh cellular 0 netw | include Selected
ping xxx.xxx.xxx.xxx source loopback xx
ENDSSH)
echo "$var1" > log
解决方案
如果我以后想用 var1 做更多事情,我会这样做;
var1=$(ssh user@$1 "ping xxx.xxx.xxx.xxx source loopback xx; SSHEND")
echo "$var1" > log
但是,只有在文本中没有控制字符时才好。
这将具有隐藏标准输出的输出的效果,相当于;
ssh user@$1 "ping xxx.xxx.xxx.xxx source loopback xx; morecommands" > log
您可能需要标准输出中的输出,并且也有方法。我想这是;
ssh user@$1 "ping xxx.xxx.xxx.xxx source loopback xx" | tee -a log
当一切都失败时,将所有远程命令放入脚本并远程执行脚本。
一个班轮;
tf=$(mktemp); echo "ping xxx.xxx.xxx.xxx source loopback xx">$tf; output=$(ssh user@$1 bash -s < $tf); echo $output; rm -f $tf
推荐阅读
- git - 无法推送到 Github 非快进错误
- vba - Improve Cycles data with Excel VBA
- html - How can I position right my List Items?
- c++ - 即使定义了参数,也调用没有参数的函数?
- fortran - Fortran 有优先级队列吗?
- spring-boot - Kotlin JpaRepository 保存新的 empy 对象以进行更新
- javascript - Syntax Error in React Component render Method
- maven - Wildfly deployed war file name is not same as fileName in pom.xml
- elixir - How does get_in() work when you pass it a function?
- c++ - MatrixBase::sqrt() 在 Eigen3 中不起作用