最近在公司里自己写的发布系统中遇到一个问题,发布系统其中有一个功能是远程执行数据库备份的功能,就是通过远程执行服务器上的一个备份脚本。备份脚本中会检查备份目录是否存在,如果不存在,则会创建备份目录。由于远程用户非root,所以创建目录时就加上了sudo 。在通过发布系统执行远程备份时,出现如下报错:

5sudo: no tty present and no askpass program specified

网上查询google ,需要修改sudo的配置文件。解决办法:

1. 注释Defaults requiretty 
Defaults requiretty修改为 #Defaults requiretty, 表示不需要控制终端。 
否则会出现sudo: sorry, you must have a tty to run sudo

2. 增加行 Defaults visiblepw 
否则会出现 sudo: no tty present and no askpass program specified

我发现sudo-1.6.9p17-5.el5是不支持这个参数的,sudo-1.7.2p1-10.el5支持。

第一个问题,碰到过。第二个我没有试过。

不过我觉得如果可以避免的话,尽量不要远程执行sudo命令了,太麻烦了,又要改配置文件,又要适应环境。

还不如用曲线的办法,先建目录,不用远程sudo。所以要慎用远程sudo