首页 > 解决方案 > sshpass 在 70 行后停止解析管道输入

问题描述

我制作了一个 bash 脚本,通过 SSH 使用 office365 IP 自动更新 Cisco ASA 上的对象组。

我从 MS 获取 IP,为 ASA 构建正确的命令语法,并将所有命令写入文件(现在 90 行,但由于这是动态的,它可以增长或缩小)。然后我想将文件中的命令推送到 ASA:

cat outfile.txt | sshpass -p "Password" ssh -t -oStrictHostKeyChecking=no foo@1.1.1.1

但是 sshpass 在第 70 行之后停止发送命令。所以 outfile.txt 有 90 行,但无论我尝试在哪个主机上“部署”命令,它只发送前 70 行。之后我得到一个

Connection to 1.1.1.1 closed by remote host.

在防火墙上,我看到来自服务器的 TCP 重置,但正如我所说,在哪个主机(尝试不同的防火墙、路由器和其他服务器)上都没有关系,我尝试它不会发送超过前 70 行。

任何人都可以解决我的问题或以其他方式解决我的问题?

谢谢

标签: linuxbashsshsshpassasa

解决方案


试试这个,也许它不漂亮但应该可以。来自服务器的最后一条消息也可以是“远程主机关闭连接”,但所有配置都应该已经正确添加。

#!/bin/bash

where="<path to your outfile.txt>";
len=`cat $where | wc -l`;
config=`for (( c=1; c<=$len; c++ )) do line=\`sed -n "$c""p" $where\`; echo $line; done`;

sshpass -p "Password" ssh -t -oStrictHostKeyChecking=no foo@1.1.1.1 $config

请考虑使用 ssh 密钥代替 sshpass。


推荐阅读