Bash 函数使用命令进行 ssh

Bash 函数使用命令进行 ssh

我有一个简单的脚本来检查一组主机的正常运行时间。但是 ssh 命令也将“uptime”命令用作主机名,并在第一次迭代后抛出错误。

while read line
do

  echo "Turning off Monitoring for Host: $line"
  monitoring_off

  check_uptime $line

done < "$HOSTFILE"

check_uptime() {
 ssh $1 'uptime'
}

以下是我的脚本执行的输出:

*****************************
14:08:44 up 203 days,  2:34,  1 user,  load average: 1.22, 1.11, 0.79

ssh: Could not resolve hostname uptime: nodename nor servname provided, or not known

你能帮我找出我的错误吗

答案1

这基本上是https://stackoverflow.com/questions/13800225/shell-script-while-read-line-loop-stops-after-the-first-line

摘自答案:

问题是 [该函数] 运行ssh命令并默认ssh从 stdin(即您的输入文件)读取。因此,您只能看到处理的第一行,因为ssh会消耗文件的其余部分并且您的 while 循环会终止。

为了防止这种情况,请将-n选项传递给您的ssh命令,使其从/dev/null标准输入而不是标准输入读取。

check_uptime() {
 ssh -n $1 'uptime'
}

相关内容