如何在自定义批处理文件中自动输入密码?

如何在自定义批处理文件中自动输入密码?

我知道这对大多数人来说听起来很幼稚,但我对 Linux 还很陌生,所以请忍耐一下。

我正在尝试创建一个批处理文件来自动执行一些命令。
其中一个命令是sudo -i因为我需要在根目录中访问一些文件。

到目前为止我的脚本如下所示:

#!/bin/bash
sudo -i
cd my-server/bin
./run-server.sh

我知道之后sudo -i会提示输入密码,所以我可以在脚本中模拟这一点吗?

答案1

您可以取出sudo脚本并确保用户使用来调用该脚本sudo scriptname

sudo -i从脚本中删除该行并用以下代码替换:

# Must prefix with sudo when calling script
if ! [[ $(id -u) == 0 ]]; then
    echo You must call this script using sudo. Aborting.
    exit 99
fi

答案2

公平的问题。但强烈建议您不要按照您目前尝试/设想的方式进行操作。避免使用这种方法的原因是它要求将您的密码输入到其他用户/攻击者可以读取的文本文件中。现在,您可以将文件设置为 600 个权限,以便只有您的用户(和 root)可以读取它,但我不确定脚本子命令是否可能记录在某处,从而使您的密码再次可供潜在攻击者使用。我想真正的问题是,为什么您需要脚本自动以 root 身份登录?

这是一个自动化过程,还是有其他原因导致您无法直接响应运行脚本时出现的密码提示?如果这是一个自动化过程,您应该删除 sudo 行并将脚本调用添加到 root 用户的 cron。只需通过简单的谷歌搜索即可找到大量有关如何设置 cron 作业的文档,但您可以从以下位置开始

此外,这是一个简单调用另一个脚本的脚本。您可能应该只让 run-server.sh 可由 root 执行,然后只需使用sudo su登录 root,然后使用 运行它/my-server/bin/run-server.sh。同样,如果您需要按计划自动执行它,您可以将其添加到 root 的 cron 中。

警告不要编写这个脚本,并且尤其不要在命令行中输入它(它将被记录)

echo 'PASSWORD' | sudo -S /my-server/bin/run-server.sh

相关内容