首页 > 解决方案 > 单元(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

标签: linuxbashshellsshcisco

解决方案


如果我以后想用 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

推荐阅读