运行.sh文件时添加系统密码

运行.sh文件时添加系统密码

我的问题是当我的电脑启动时我想用下面的命令禁用 mysql 服务

sudo service mysql stop || service mysql stop

在这两种情况下,系统都要求输入系统密码,所以我每次都手动输入密码

我使用上述命令创建一个 .sh 文件

那么,如何使用上述脚本设置并传递我的系统密码,以便在每次运行该脚本时不要输入密码。

答案1

更好/更安全的替代方案是:

  • 禁用该mysql.service单元如下systemd

    sudo systemctl disable mysql.service
    

    这样,Mysql服务器就不会在启动时自动启动,而是可以在需要时随时手动启动。

  • 将您的命令添加到rootcrontab 中以便在启动后运行,如下所示:

    sudo crontab -e
    

    systemd然后,使用的服务操作添加一行,如下所示:

    @reboot sleep 20 && /usr/bin/systemctl stop mysql.service
    

    或者/etc/init.d/mysql像这样使用:

    @reboot sleep 20 && /etc/init.d/mysql stop
    

    或者,甚至/usr/sbin/service像这样使用:

    @reboot sleep 20 && /usr/sbin/service mysql stop
    

    请注意,在 crontab 中使用可执行文件的完整路径是一个很好的措施,并且添加调用sleep以延迟执行,直到服务启动并响应。


然而,sudo有一个-S, --stdin选项:

-S,--标准输入
     将提示写入标准错误并从中读取密码
     标准输入而不是使用终端设备。

可以像这样使用:

echo 'PASSWORD' | /usr/bin/sudo --stdin /usr/bin/systemctl stop mysql.service

或者像这样:

echo 'PASSWORD' | /usr/bin/sudo --stdin /etc/init.d/mysql stop

或者像这样:

echo 'PASSWORD' | /usr/bin/sudo --stdin /usr/sbin/service mysql stop

但是,不建议使用此方法,因为它会以纯文本形式保存和传递您的密码,更不用说此方法所涉及的其他安全隐患。

还要注意的是,sudo如果您的命令嵌套了||&&;操作符/分隔符,则在每个命令需要时,您需要sudo在这些分隔符的两侧使用 ,否则,命令前没有 的一侧sudo将以普通用户权限执行,并且不是超级用户权限。

答案2

为了避免每次运行脚本时都必须输入系统密码,您可以使用 sudoers 文件授予用户无需输入密码即可执行 sudo 命令的权限。

您可以按照以下步骤操作:

使用 visudo 命令打开 sudoers 文件:

sudo visudo

在文件末尾添加以下行,将用户名替换为您的实际用户名:

username ALL=(ALL) NOPASSWD: /usr/sbin/service mysql stop

此行授予用户以超级用户身份执行 service mysql stop 命令的权限,而无需输入密码。

保存并退出文件。使用此配置,当您运行脚本时,命令sudo将不会要求输入密码,并且脚本将能够在没有任何手动干预的情况下停止 MySQL 服务。

相关内容