我研究了这个问题并且所有答案都建议添加visudo: 默认值:user!requiretty
它不起作用!
我有两个Linux机箱(RedHat)。我有一个Java类,它使用ProcessBuilder / Process来执行命令。该类在系统帐户下运行。 在两个方框中,我都运行
su other-user -c 'some-command'
并在Process对象的输入流中提供其他用户的密码。
在一个方框中,命令成功,另一方面我得到上面的错误。 两台机器上的sudoers文件没有针对requiretty的排除项('默认值requiretty'在两个文件上都设置了)。 我尝试添加排除,如我找到的答案所示。我尝试了运行流程的系统用户和其他用户' ...
不起作用。
还有什么问题?添加requiretty exceptoin后,是否需要重新启动系统?
答案 0 :(得分:3)
sudoers
适用于sudo
而非su
,因此您应使用sudo
。
根据su
手册:
-c, --command COMMAND
指定shell将使用其
-c
调用的命令。执行的命令将没有控制终端。此选项不能用于执行需要控制TTY的交互式程序。
答案 1 :(得分:0)
如果试图避免使用sudo或没有sudo特权,则可以使用TTY生成。
在运行代码之前,只需调用以下代码之一即可,使您看到所提到的错误。
以下是一些您可以使用的代码示例,具体取决于您使用的代码或系统:
python -c 'import pty; pty.spawn("/bin/sh")'
echo os.system('/bin/bash')
/bin/sh -i
perl —e 'exec "/bin/sh";'
perl: exec "/bin/sh";
ruby: exec "/bin/sh"
lua: os.execute('/bin/sh')
(来自IRB内部)
exec "/bin/sh"
(来自vi内)
:!bash
(来自vi内)
:set shell=/bin/bash:shell
(来自nmap)
!sh
前三个选择是我最常用的选择,我相信他们的结果。 我在进行渗透测试时正在使用它们。