![bash脚本登录多个Linux服务器并通过ssh收集多个命令的输出](https://linux22.com/image/79607/bash%E8%84%9A%E6%9C%AC%E7%99%BB%E5%BD%95%E5%A4%9A%E4%B8%AALinux%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%B9%B6%E9%80%9A%E8%BF%87ssh%E6%94%B6%E9%9B%86%E5%A4%9A%E4%B8%AA%E5%91%BD%E4%BB%A4%E7%9A%84%E8%BE%93%E5%87%BA.png)
我需要通过 .gnu/linux 服务器登录并收集以下命令的输出SSH
。我已经完成了无密码身份SSH
验证。我想用 bash 脚本来做到这一点。
df -lh | awk '{if ($5 >= 20) { print $6 " " $2 " " $3 " " $5 }}'
top -b -n1 | grep "Cpu(s)" | awk '{print 100 - $5}'
我尝试了下面的命令,但不是引用“命令”,如果给出单个命令,就像df
它正在工作一样..但给出类似长命令:
df -lh | awk '{if ($5 >= 20) { print $6 " " $2 " " $3 " " $5 }}'
top -b -n1 | grep "Cpu(s)" | awk '{print 100 - $5}'
它不工作..
答案1
答案2
第1步:将其写入脚本
cat script.sh
df -lh | awk '{if ($5 >= 20) { print $6 " " $2 " " $3 " " $5 }}'
top -b -n1 | grep "Cpu(s)" | awk '{print 100 - $5}'
第2步:scp
将其发送给主机。 (scp 是安全副本),主机位于$h
scp script.sh $h:/tmp
第3步:执行它
ssh $h bash /tmp/script.sh
您可能希望重定向输出
ssh $h bash /tmp/script.sh > result-$h.txt
答案3
如果您想运行这些行而不编写单独的脚本文件,则需要用双引号将命令括起来,并转义可能与之冲突的任何字符。例如:
ssh your-host "
df -lh | awk '{if (\$5 >= 20) { print \$6 \" \" \$2 \" \" \$3 \" \" \$5 }}'
top -b -n1 | grep \"Cpu(s)\" | awk '{print 100 - \$5}'"
或者使用单引号:
ssh your-host'
df -lh | awk '"'"'{if ($5 >= 20) { print $6 " " $2 " " $3 " " $5 }}'"'"'
top -b -n1 | grep "Cpu(s)" | awk '"'"'{print 100 - $5}'"'"
或者使用此处文档:
ssh your-host "$(cat << 'END'
df -lh | awk '{if ($5 >= 20) { print $6 " " $2 " " $3 " " $5 }}'
top -b -n1 | grep "Cpu(s)" | awk '{print 100 - $5}'
END
)"
最后一个选项的缺点是使用更多行,但它不需要您更改命令中的任何内容。