我需要切换到 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