如何在su下运行sudo?

时间:2014-03-03 15:59:43

标签: linux bash scripting sudo

我有这个:

su $username -c ./script.sh

问题是在脚本中我有'sudo'命令,他们说我

sudo: no tty present and no askpass program specified

如何做到这一点?

UPD:我需要sudo和su。我需要做的是将脚本作为USER $ username运行,并能够以root身份在脚本中运行某些命令(例如,pacman -S)

解决方案:我在运行脚本之前已经在/ etc / sudoers中添加了NOPASSWD选项,并在脚本完成后使用sed删除了此条目。

1 个答案:

答案 0 :(得分:-1)

首先将chmod +x设置为您的脚本

尝试:

#!/bin/bash
echo "hello"
su - <your-user> -c /path/to/script.sh
echo "good bye"

<强>更新

你应该找到一种方法来强制bash使用伪tty

强制伪tty分配。这可用于在远程机器上执行任意基于屏幕的程序,这可能非常有用,例如,实现菜单服务时。多个-t选项强制tty分配,即使ssh没有本地tty。

如果用户不是sudoers,请执行以下步骤:

这是您需要在/etc/sudoers中执行的操作:

# User privilege specification
root        ALL=(ALL:ALL) ALL
newuser    ALL=(ALL:ALL) ALL

你还有办法: 你可以输入密码,如果它有密码:

echo "yourpassword" | sudo -S

OR

您可以运行以下脚本:

#!/usr/bin/expect -f 
spawn sudo -s <<EOF 
expect "assword for username:" 
send -- "user-password\r" 
expect eof

你也可以这样做:

sudo -kS bash - << EOF
password
whoami
echo "Not a good idea to have a password encoded in plain text"
EOF