Help us understand the problem. What is going on with this article?

SSHでもsudoがしたい

More than 3 years have passed since last update.

おぼえがき。タイトルに他意はございません。
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に権限を絞りました。
セキュリティのために設定されているところを変えることになるので、与える権限は最小限に。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away