如何通过 SSH 在其他服务器上执行 sudo NOPASSWD 命令

如何通过 SSH 在其他服务器上执行 sudo NOPASSWD 命令

我已阅读与该问题相关的所有帖子。但如果您也能看到我的帖子并提出建议。

我正在尝试进行无密码 SSH 并在远程服务器上运行脚本。但 Sudo 访问要求输入密码。请提出建议。它在本地路径上运行良好。但任何需要 root 访问权限的命令或脚本都会失败。

以下是脚本:

#!/bin/sh
#set -x
# This Script will search for mib files on Current Server and other Server
# to load mib on current Server.

if [ -f /home/shuksand/Script/MibSearch.conf ]
then
        . /home/shuksand/Script/MibSearch.conf
else
        echo "Failed to find config file. Hence Existing!!!!"
fi

# Check alll MIBS on Server


while read line
do
        ServerName=$line
        echo $line
        scp  /home/shuksand/Input/Mib.txt $ServerName:
        cat /home/shuksand/Input/Mib.txt | while read DATA
        do
                echo $DATA
                ssh -t -t shuksand@${ServerName} 'sudo su - root /bin/sh /home/shuksand/Mib.sh $DATA'
        done
done < /home/shuksand/Input/ServerList.txt

提前致谢!!

答案1

此问题通常是由 sudoers 文件引起的。可以尝试的一种方法就是让脚本只运行 sh,然后从该 sh 提示符运行 sudo 命令,看看是否需要密码。

请注意,sudo 倾向于记住您是否最近从同一登录验证了密码。因此,如果 sudo 认为您已充分验证过一次(也许您输入了密码),然后您对 /etc/sudoers 进行了更改,然后再次尝试 sudo,您很容易被误导,因为 sudo 可能不会提示您,因为 sudo 可能会记得您在不到 5 分钟前通过了测试。这是由 /etc/sudoers 中的“超时”值设置的(man sudoers)。

sudo su - root /bin/sh /home/shuksand/Mib.sh $DATA

看起来它可能有点复杂,而且不必要。我有时看到 sudo 工作,而 su 失败,反之亦然。该命令需要两者才能工作。在许多系统上,

sudo -i ~shuksand/Mib.sh $DATA

可能会做同样的事情。

答案2

我认为你需要做的是编辑你的 /etc/sudoers 文件。添加如下内容:

<your username> ALL=(ALL) NOPASSWD: ALL

您可以在这里找到更多信息: https://askubuntu.com/questions/147241/execute-sudo-without-password

我可以建议您修改一下问题的格式吗?您写的大部分内容(脚本)与您的问题其实并不相关。

编辑:如果您已正确将 Mib.sh 文件设置为可执行文件并在文件开头包含 !#/bin/sh 行,那么您只需运行“sudo su - /home/shuksand/Mib.sh $DATA”(执行 su 时隐含/默认为“root”)

相关内容