首页 > 解决方案 > 在 bash 中包装 sudo 和 ssh 命令

问题描述

我需要切换到 sudo 用户,然后使用 SSH 在远程服务器上运行命令

实际命令

docker stats --no-stream --format  "\"{{ .Name }}\^C{\"memory\":{\"raw\":\"{{ .MemUsage }}\",\"percent\":\"{{ .MemPerc }}\"},\"Node\":\"{{ \"`hostname -i`\" }}\",\"cpu\":\"{{ .CPUPerc }}\"},"

从 ssh 运行也可以

ssh 1.2.3.4 'docker stats --no-stream --format  "\"{{ .Name }}\^C{\"memory\":{\"raw\":\"{{ .MemUsage }}\",\"percent\":\"{{ .MemPerc }}\"},\"Node\":\"{{ \"`hostname -i`\" }}\",\"cpu\":\"{{ .CPUPerc }}\"},"'

但是,当我尝试将其传递为sudo su - core -c它不起作用时,因为“模式匹配。如何正确包装此命令?

sudo su - core -c 'ssh 1.2.3.4 'docker stats --no-stream --format  "\"{{ .Name }}\^C{\"memory\":{\"raw\":\"{{ .MemUsage }}\",\"percent\":\"{{ .MemPerc }}\"},\"Node\":\"{{ \"`hostname -i`\" }}\",\"cpu\":\"{{ .CPUPerc }}\"},"''

标签: bash

解决方案


使用 here-document 更简单:

sudo su - core << 'END_SUDO'
  ssh self << 'END_SSH'
docker stats --no-stream --format  '"{{ .Name }}{"memory":{"raw":"{{ .MemUsage }}","percent":"{{ .MemPerc }}"},"Node":"{{ "'"$(hostname -i)"'" }}","cpu":"{{ .CPUPerc }}"},'
END_SSH
END_SUDO

推荐阅读