我知道这对大多数人来说听起来很幼稚,但我对 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