我有这个:
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删除了此条目。
答案 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