【发布时间】:2019-08-13 10:48:52
【问题描述】:
我正在尝试将文件循环到 ssh 到服务器列表,并在这些服务器上为某些日志文件执行查找命令。我知道 ssh 会吞下整个输入文件。所以我使用 -n 参数来 ssh。这工作正常,但在某些服务器上我遇到了一个新错误。
输入文件的构建方式如下: 服务器名称:位置:时间:日志文件扩展
我使用的 Bash 中的代码是:
sshCmd="ssh -n -o ConnectTimeout=5 -o Batchmode=yes -o StrictHostKeyChecking=no -o CheckHostIP=no -o PasswordAuthentication=no -q"
while IFS=: read -r f1 f2 f3 f4 ; do
$sshCmd "$f1"
find "$f2" -type f -name "$f4" -mtime +"$f3"
在某些服务器上我收到以下错误:
不会分配伪终端,因为 stdin 不是终端。 stty:标准输入:设备的 ioctl 不合适
我尝试了多种选择来解决这个问题。我已经使用了 -t、-tt、-T 选项,但是当使用这些选项时,相同的错误仍然存在,或者终端变得无响应。
谁有解决办法?
【问题讨论】:
-
考虑使用 Ansible 或 Puppet Bolt 完成此类任务。
-
@brunorey 那不是 atm 选项
-
sshCmd应该是一个函数,而不是一个变量。 -
find命令是否应该在远程主机上运行?如图所示,您正在尝试启动交互式 shell(默认命令)。 -
我从未说过它会解决问题;无论如何,它应该是一个函数。见Bash FAQ 050。而且由于
find必须在远程机器上运行,您需要将其指定为tossh的实际参数,而不是在下一行写成单独的命令。
标签: bash while-loop pty stty