bash에서 sudo 및 ssh 명령 래핑

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

답변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

관련 정보