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

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

おすすめ記事