1. yutaro1985

    Posted

    yutaro1985
Changes in title
+SSHでもsudoがしたい
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,36 @@
+おぼえがき。タイトルに他意はございません。
+sshコマンドでログインせずにリモートでコマンド実行したいときの方法。
+普通に実行しようとするとtty(端末)がないよって怒られるので、それに対する対処。
+
+# sshのtオプションを使う
+ローカルからホスト名「hogehoge」の端末上でコマンド実行することを想定
+hogehogeのところを任意のホスト名やIPアドレス、sudo以下のコマンドのところを実行したい任意のコマンドに変更すればいけるはず。
+当然のことながら、対象のホストにログインする権限や、ホスト上で実行したいコマンドを実行できる権限がなければうまくいきません。
+
+```bash
+ssh -t hogehoge sudo ls -l
+```
+
+こんな感じにするとsudoのパスワードを求められるので、入力してやれば該当のコマンドが実行できるはず。
+システムの制約上sudoersを変えられない時もあると思うのでこれでうまく行くときは基本これでいいと思います。たぶん。
+
+# sudoersを編集する
+
+セキュリティリスクがありますが、それを許容するならこちらも。
+`/etc/sudoers`の中に`Defaults requiretty`という記述があるので、それをコメントアウトするか`Defaults !requiretty`と記載する方法。
+ただ、セキュリティホールを突かれてsudoされる恐れがあるので全ユーザ・全コマンドでこの設定にするのは好ましくないです。
+そこで、まずユーザを限定します。cronのスクリプトなどで実行したい場合は専用のユーザを作っておくといいと思います。
+下記はhogeユーザを指定した場合。
+
+```
+Defaults:hoge !requiretty
+```
+
+さらに、該当ユーザがsudoで実行できるファイルを制限するには
+
+```
+hoge ALL=(ALL) NOPASSWD: /opt/bin/test.sh
+```
+
+といった感じ。`/opt/bin/test.sh`に権限を絞りました。
+セキュリティのために設定されているところを変えることになるので、与える権限は最小限に。