【问题标题】:How to run sudo under su?如何在su下运行sudo?
【发布时间】:2014-03-03 15:59:43
【问题描述】:

我有这个:

su $username -c ./script.sh

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

sudo: no tty present and no askpass program specified

如何正确地做到这一点?

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

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

【问题讨论】:

  • 修复脚本或删除 su。
  • 这些用户是否在 sudoers 文件中?
  • 配置您的 sudoers 文件以将相关命令列入白名单,而无需输入密码。 (TTY 是安全提示输入密码所必需的,但如果您不提示输入密码...)

标签: linux bash scripting sudo


【解决方案1】:

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

尝试:

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

更新:

你应该找到一种方法来强制 bash 使用 pseudo-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

您可以运行以下脚本:

#!/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

【讨论】:

  • 我知道组、visudo 和其他东西 :) 是的,我的用户在 sudoers 中。我试过 su - $USER -c /path/to/script.sh - 这也不起作用(同样的错误)。 sudo,在su -c下执行,就是看不到终端什么的,无法执行,可惜了。
  • @@EwanCoder 我又更新了……这个用户有密码吗? su - &lt;your-user&gt; -c /path/to/script.sh的结果是什么
  • 我不介意用户在脚本执行时输入他的密码。问题不在于密码,而在于 sudo 本身,它在 'su - $user -c' 进程下不起作用。
  • 请不要使用$。如果您的用户是测试。试试:su - test -c /path/to/script.sh
  • 结果是同样的错误 sudo: no tty present and no askpass program specified
最近更新 更多