17384


下記サイトを参考にして、deploy scriptを書きましたが下記エラーにより失敗してしまいます。  
<http://docs.drone.io/ssh.html>

deploy script

[code]

    sudo rm -rf /var/www/html/[project-name]
    sudo mkdir /var/www/html/[project-name]
    sudo cp -pr /home/[user-name]/temp/* /var/www/html/[project-name]
    
[/code]

エラー

[code]

    sudo: no tty present and no askpass program specified
    sudo: no tty present and no askpass program specified
    sudo: no tty present and no askpass program specified
    exit status 1
    
[/code]

`sudo`を取るとpermission deniedが出てしまいます。これはおそらく/var/ディレクトリのアクセス権限のせいですが。  
本当は、例のようにデプロイする前にnginxをstopしたいのですが、下記のようにrootで起動しているようでできません。

[code]

    root       517  0.0  0.2  15096  2276 ?        Ss   21:36   0:00 nginx: master process nginx
    
[/code]

この場合はどのように書けばいいのでしょうか。またなぜ例では`sudo`が記入されていないのでしょうか。

追記  
OSはDebianです


CC BY-SA 3.0
2015-10-07T14:18:16.153
17378
2015-10-07T16:18:08.843
2015-10-07T15:12:08.580
7232
7232
question
デプロイ
drone.ioのssh deploy scriptが失敗する。


> sudo: no tty present and no askpass program specified

これは sudo
がパスワードを要求しようとしたが、端末（tty）が利用できず、他のパスワード入力手段も設定されていない、というエラーです。今回の場合いずれにせよその場でパスワードを入力することはできないでしょうから、パスワードなしで
sudo を実行できるよう設定することで回避するぐらいでしょうか。

もしこの方法を採るのであれば、一連の処理をまとめたスクリプトを書いた上で、SSH
に使うユーザーかつそのスクリプトのみをパスワードなしで実行できるようにするとより安全です。

  * [特定のコマンドをパスワードなしでsudo する設定 - Slow Dance](http://d.hatena.ne.jp/LukeSilvia/20080716/p1)
  * [How do I sudo a command in a script without being asked for a password? - Ask Ubuntu](https://askubuntu.com/a/155827)

nginx は init スクリプトで起動したのだろうと思います。この場合 `service stop nginx` `service start
nginx` などとして操作できると思いますが、これも root 権限が必要です。

そしてご想像の通り、drone.io から ssh させるユーザーに適切なアクセス権が与えられていれば、sudo は不要になります。サンプルスクリプトで
sudo が使われていないのもそのためでしょう。

まとめると、

  * デプロイ先のパーミッションを適切に設定し、手動で nginx を起動停止するようにする  
→ sudo 不要。drone.io のドキュメント通りで動くはず

  * パーミッションそのまま or 現状通り nginx の起動を init に任せる  
→ sudo が必要なので、NOPASSWD の設定を行う

のどちらかになるかと思います。


CC BY-SA 3.0
2015-10-07T16:18:08.843
17384
2015-10-07T16:18:08.843
2017-04-13T12:25:24.820
-1
8000
17378
answer