SSH使用、リモートで任意のコマンドをsudoで実行(パスワードも入力)

先の記事で書いた ClamAV のホワイトリストを ClamAV を実行している各サーバに配りたい。

まぁ普通は Ansible とか使うよね...

ただ、いろいろわけあって全部のサーバにAnsibleが使えないので、この際PHPとかでサーバにSSHでリモートコマンド実行するプログラムでも作っとこうかと思っていろいろやってみたけどイマイチ上手くいかない。

ファイルはroot権限(実際はrootじゃなくてもいいが、ログイン可能なユーザ以外のユーザ権限)で作成する必要があるたが、sudoでのコマンド実行をワンライナーで書けない...orz

例えば、「あるファイルを新規作成する」ことをリモートでsudoを使ってやりたい、のみでよければこんな感じか:

$ echo "<パスワード>" | ssh <ユーザ>@<サーバ> "sudo -S touch <ファイル名>"<br>
---ここから---<br>
<ユーザ>@<サーバ>&#039;s password: 【パスワード入力】 ※今回、ここのパスワード入力はPHPのスクリプトで何とかする<br>
[sudo] <ユーザ> のパスワード: 【ここは自動で入力される】<br>
---ここまで---

しかしこれが「ある文字列をあるファイルに追加(今回は新規作成でよい)する」ことをリモートでsudoを使ってやりたい、ということだと、リダイレクトが発生するので上手くいかない。

$ echo "<パスワード>" | ssh <ユーザ>@<サーバ> "echo &#039;<任意の文字列>&#039; | sudo -S tee <ファイル名>"<br>
---ここから---<br>
<ユーザ>@<サーバ>&#039;s password: 【パスワード入力】<br>
[sudo] <ユーザ> のパスワード:残念、また試してください。<br>
[sudo] <ユーザ> のパスワード:<br>
sudo: 1 回パスワード試行を間違えました<br>
---ここまで---

仕方ないので2行に分けて、以下のように2コマンド目だけsudoすることにした:

1) リモートで任意の場所にファイルを作成<br>
$ ssh <ユーザ名>@<サーバ> "echo &#039;<任意の文字列>&#039; > ~/<ファイル名>"<br>
<br>
2) 作成したファイルを sudo で実際に置きたいディレクトリ以下に移動<br>
$ echo "<パスワード>" | ssh <ユーザ名>@<サーバ>  "sudo -S /bin/mv ~/<ファイル名> <ファイルを置きたいディレクトリ>/"

うーん... すごく... イマイチです...
何か方法があるのだろうか。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は 必須項目です。

管理者が承認次第、表示されます。

*