shell脚本权限

有时候在shell的脚本中需要使用到sudo,但是输入不了密码

脚本中的命令需要root权限

出现这种情况的话,有两个方法可以解决

  1. 将密码传给sudo

    1
    2
    3
    echo "password" | sudo -S command
    eg:
    echo "123456" | sudo -S docker images
  2. 通过修改配置文件,提升命令的权限

    1
    2
    3
    4
    sudo vim /etc/sudoer
    username ALL=(ALL) NOPASSWD: /command_position
    eg:
    lanzhan ALL=(ALL) NOPASSWD: /usr/bin/docker
  1. 如果不想将脚本中的命令加入无密码执行,可以修改脚本本身的权限。

    1
    2
    sudo vim /etc/sudoer
    lanzhan ALL=(ALL) NOPASSWD: /home/lanzhan/.local/bin/mypowertop

    两个注意点:

    • 修改脚本后执行使用sudo,然后并不需要输入密码

      1
      sudo mypowertop
    • 脚本中本来需要写sudo的命令不需要使用sudo了,因为脚本已经拥有了root权限。因为脚本中的命令本来就是脚本fork出来的一个子进程,自然不需要加sudo了。