当谈到 ssh、sudo 和其他 unix 东西时,我是一个新手...所以请耐心听我说完。
我已经设置了一个 rails 网站并通过 ssh 使用 vlad 进行部署。一切正常。现在我需要让我的部署过程运行 sudo 命令来重新启动 monit。
我基本上只想运行“sudo monit reload”和“sudo monit start my_job_name”。但是当我让 vlad 运行这些命令时,我从 ubuntu 服务器收到错误:
sudo: no tty present and no askpass program specified
我进行了一些谷歌搜索,我发现的大多数答案都涉及修改,/etc/sudoers
以便不需要为我想要的命令输入密码。老实说,我不喜欢这个选项。这似乎是一种黑客/解决方法,而我应该能够配置我的服务器以正确要求输入密码并让 vlad 提供密码(毕竟,vlad 支持ssh_password
我已经填写的设置)。
有人可以指出我正确的方向来配置我的 vlad 脚本和我的 ubuntu 10.10 服务器,以正确运行我的 sudo 命令吗?
答案1
尝试这个:
set :sudo_flags, sudo_flags << '-S'
set :run_as_sudo, [sudo_cmd, sudo_flags].flatten.compact.join(' ')
对于你的命令请执行以下操作:
run "#{run_as_sudo} cmd"
它应该在运行时提示您输入密码。
答案2
您可以修改/etc/sudoers
和删除requiretty
选项,以便在没有可用 tty 时让 sudo 工作(例如来自 cron 作业、守护程序等)。您不必允许无密码 sudo,只需删除此选项即可。