はじめに
コマンドやシェルスクリプトなんかでsshコマンドに他のコマンド渡して リモート操作したいときありますよね。こんな感じ
# ssh hoge@hogehost.co.jp 'sudo apachectl graceful'
その時にsudo: sorry, you must have a tty to run sudo
な感じでエラーが出てしまうときの対処法メモ
対処
対処は主に下記の2パターンあります。
リモート先の設定を変えても良い場合は1のほうが良いかもしれませんね
- リモート先でsudoの設定をいじる
- 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!