読者です 読者をやめる 読者になる 読者になる

tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

sshコマンドでtty無しでのsudo実行。'sudo: sorry, you must have a tty to run sudo'なエラーを出なくする

はじめに

コマンドやシェルスクリプトなんかでsshコマンドに他のコマンド渡して リモート操作したいときありますよね。こんな感じ

# ssh hoge@hogehost.co.jp 'sudo apachectl graceful'

その時にsudo: sorry, you must have a tty to run sudoな感じでエラーが出てしまうときの対処法メモ

対処

対処は主に下記の2パターンあります。
リモート先の設定を変えても良い場合は1のほうが良いかもしれませんね

  1. リモート先でsudoの設定をいじる
  2. sshのオプション-tをつける

1. リモート先でsudoの設定をいじる

リモート先が自由にいじれる場合はsudoの設定ファイルをいじります。

  • リモート先での作業
# sudo vim /etc/sudoers
---- vi編集 ----
#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear. 
#         You have to run "ssh -t hostname sudo <cmd>".
#
Defaults    requiretty
↓
※ コメントアウトする
# Defaults    requiretty
---------------

2. sshのオプション-tをつける

設定するというよりはsshコマンドに-tオプションをつけて実行するだけです。
-tオプションをつけることで強制的に仮想端末を割り当てます。

# ssh -t hoge@hogehost.co.jp 'sudo apachectl graceful'

おわり

enjoy!