【问题标题】:sshpass stops parsing piped input after 70 linessshpass 在 70 行后停止解析管道输入
【发布时间】:2020-03-04 18:49:27
【问题描述】:

我制作了一个 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 行.

有人为我的问题找到了解决方案,或者有其他方法可以解决我的问题吗?

谢谢

【问题讨论】:

  • 您是否使用手动复制和粘贴检查了此配置?尝试在命令“ssh -o ConnectTimeout=seconds”中增加 ssh 会话的超时时间。 sshpass 仅用于密码,在您的情况下,所有作业都使用“cat”读取配置文件,使用 ssh 进行外部连接。
  • 是的,我通过粘贴尝试了配置,它确实有效。我也尝试过 ConnectTimeout 但它没有用,我相信这个问题与超时无关,因为 ssh 只是关闭连接而不是超时或任何东西

标签: linux bash ssh sshpass asa


【解决方案1】:

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

#!/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。

【讨论】:

  • 这只会剪切我配置中的每个换行符并将整个配置粘贴到 ASA 中,我真的不知道这对我的问题有什么帮助,你能详细说明一下吗?跨度>
  • 你检查了吗?我在我的一个旧项目中使用了第二种解决方案。我检查了你之前的命令,里面有超过 150 行的配置文件,我对此没有任何问题(但与 ASA 不同的设备)。
  • 我唯一的问题是 ASA,脚本本身在任何其他设备上都可以正常工作。还是谢谢
猜你喜欢
  • 2015-08-09
  • 2011-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-13
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
相关资源
最近更新 更多