2015年4月6日月曜日

SSHで「-t」オプションを付けても、失敗するときの対処法


なのまるです!

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の設定を変えるのは、面倒なのでやめました~


参考サイト


Zenback