将 sudo 和 ssh 命令包装在 bash 中

将 sudo 和 ssh 命令包装在 bash 中

我需要切换到 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 }}\"},"''

答案1

一种解决方案是首先运行sudo su - core以更改用户,然后运行命令。之后,您只需编写即可exit返回到原始用户。但我猜你想要一句俏话。在这种情况下,我认为这应该有效,不幸的是我无法测试它:

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 }}\"},"'

答案2

它与此处文档一起使用

 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

相关内容