Java Runtime调用本地命令错误:sudo: sorry, you must have a tty to run sudo

    通过Java的Runtime.getRuntime().exec()方法调用本地命令时:

 Runtime.getRuntime().exec(new String[] {"/bin/bash", "-c", "sudo nmap -sU -p 53 8.8.8.8"});

     

    在控制台下测试上面代码没有任何问题,当程序在后台执行时就不能正常运行,当时非常困惑;然后通过java.lang.Process的getErrorStream方法获取到错误信息:

sudo: sorry, you must have a tty to run sudo

     

    通过google后很快就定位到问题了,因为在配置文件/etc/sudoers设置了requiretty选项后,执行sudo需要一个终端;然后使用vim修改配置文件或直接执行visudo命令编辑配置文件:

#                                                                                
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear. 
#         You have to run "ssh -t hostname sudo <cmd>".                          
#                                                                                
# Defaults    requiretty    # 将此行注释掉 

   

    然后重新执行程序,问题解决;

猜你喜欢

转载自happyaxu.iteye.com/blog/2076875