bash - 在 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 }}\"},"''
解决方案
使用 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
推荐阅读
- microsoft-graph-api - MS Graph API 错误:“无法执行 Skype 后端请求 GetThreadsS2SRequest
- spring - 如何知道 PagingState 已到达最后一页?
- javascript - 由于“服务器助推器”角色,我收到缺少权限错误,我怎样才能让他担任除此角色之外的所有角色?
- android - NavController 混淆后不重命名
- oop - 请求数据时立即或延迟修复不一致的状态
- import - 从 PCE-VDL 数据记录器设备导入 OCTAVE 数据并将小数彗差转换为小数点
- python - 使用shutil将空文件放置在多个位置
- scala - 如何更改默认的 sbt 临时目录?
- azure-active-directory - 如何从 Azure AD B2C 用户配置文件编辑过程中获取对象 ID 值
- amazon-kinesis - ValidationException - 成员的长度必须小于或等于 500