LoginSignup
34
31

More than 5 years have passed since last update.

SSHでもsudoがしたい

Last updated at Posted at 2015-02-02

おぼえがき。タイトルに他意はございません。
sshコマンドでログインせずにリモートでコマンド実行したいときの方法。
普通に実行しようとするとtty(端末)がないよって怒られるので、それに対する対処。
※20150424追記
よくよく考えてみたら、こんなことしなくてもansibleが使えるならansibleの-Kを使ってリモートでsudoできるような気がした。
大量のサーバ宛にコマンド実行するときはそっちのほうが確実かも、と下記のやり方をやってシェルスクリプト書こうとしてハマって思いました。
作業したいリモートサーバが1台とかで、簡単なファイル内容の確認程度とかそういうのだったら下記のほうが楽かも。

sshのtオプションを使う

ローカルからホスト名「hogehoge」の端末上でコマンド実行することを想定
hogehogeのところを任意のホスト名やIPアドレス、sudo以下のコマンドのところを実行したい任意のコマンドに変更すればいけるはず。
当然のことながら、対象のホストにログインする権限や、ホスト上で実行したいコマンドを実行できる権限がなければうまくいきません。

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に権限を絞りました。
セキュリティのために設定されているところを変えることになるので、与える権限は最小限に。

34
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
31