なのまるです!
Jobで、SSHしてからsudoしようとしたら、ハマったので対処法のメモです!
もくじ
何があったの?
リモートのサーバーにsudoして処理するスクリプトを書いていたところ問題になったので、その対処法です!例えば、以下のようなスクリプト
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i user.key [TARGET_HOST] "sudo hogehoge.sh"
sudo: sorry, you must have a tty to run sudo
いきなりsudo出来なくて、以下のようなメッセージが出力・・・sudo: sorry, you must have a tty to run sudo
sshのmanには
-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g., when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.どうやら、「-t」オプションを付けてあげると強制的に仮想端末(tty)が割り当たるようになるみたいです!
以前にもやったような?www
あれ?まだダメだ!
今度は以下のメッセージを出して、実行できません!Pseudo-terminal will not be allocated because stdin is not a terminal. sudo: sorry, you must have a tty to run sudoこれの対処法を探したら、こちらのサイトで対処法が!
どうやら、manにも書いてあるんですが、「-t -t」というように2つの「-t」オプションを付けるんだそうです!
e.g., when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.
実際にこれで解決!しました!(^o^)
/etc/sudoers の設定を変える方法も!
sudoersで設定を変えるって方法ばっかり出てきたんですが、- 単体のサーバーを変えるならいいのですが・・・
- これから設定するサーバーも設定し忘れたら・・・
とか考えていたら、この設定では今回は使えないかなー?って思いました!
参考までに、設定を書いておきますけど。
!Defaults requiretty か #Defaults requiretty コメントアウトする
まとめ
- 「-t」オプションでダメだったら「-t -t」オプションだよ!w
- しっかし、OSのバージョンやsudoのバージョンによって設定違うってウザいですわ!ヽ(`Д´)ノプンプン
- sudoersの設定を変えるのは、面倒なのでやめました~