からあげ日記

Webエンジニア的なこととか。

Fabric の sudo() でパスワードの入力をせずに処理を実行

Fabric でコマンドを実行する際にパスワードを聞かれてしまい、処理が失敗する場合。 shell=False オプションを追加する。

エラー内容

[<remote_server>] sudo: /bin/systemctl restart myapp.service
[<remote_server>] out: sudo password:

[<remote_server>] out: Sorry, user my_user is not allowed to execute '/bin/bash -l -c /bin/systemctl restart myapp.service' as root on <remote_server>.
[<remote_server>] out:


Fatal error: sudo() received nonzero return code 1 while executing!

Requested: /bin/systemctl restart myapp.service
Executed: sudo -S -p 'sudo password:'  /bin/bash -l -c "/bin/systemctl restart myapp.service"

Aborting.

対処法

shell=False オプションを追加する。

$ sudo('systemctl restart myapp.service', shell=False)

環境

2017/12/12 現在。

$ fab --version
Fabric3 1.12.post1
Paramiko 2.0.2

$ python3 --version
Python 3.6.2

参考

stackoverflow.com

Operations — Fabric documentation