“echo”密码“| sudo -S <command />”要求输入密码

时间:2017-05-26 11:14:43

标签: linux terminal sudo

我尝试运行脚本而不成为su用户,我使用此命令:

echo "password" | sudo -S <command>

如果我将此命令用于“scp”,“mv”,“whoami”命令,该命令运行良好,但当我用于“chmod”时,该命令会要求我的用户输入密码。我没有输入密码,命令有效。我的问题是系统要求密码给我。我不希望系统要求输入密码。

问题ss是这样的:

[myLocalUser@myServer test-dir]$ ls -lt
total 24
--wx-wx-wx 1 root root 1397 May 26 12:12 file1
--wx-wx-wx 1 root root  867 May 26 12:12 script1
--wx-wx-wx 1 root root 8293 May 26 12:12 file2
--wx-wx-wx 1 root root 2521 May 26 12:12 file3

[myLocalUser@myServer test-dir]$ echo "myPassw0rd" | sudo -S chmod 111 /tmp/test-dir/*
[sudo] password for myLocalUser: I DONT WANT ASK FOR PASSWORD

[myLocalUser@myServer test-dir]$ ls -lt
total 24
---x--x--x 1 root root 1397 May 26 12:12 file1
---x--x--x 1 root root  867 May 26 12:12 script1
---x--x--x 1 root root 8293 May 26 12:12 file2
---x--x--x 1 root root 2521 May 26 12:12 file3

2 个答案:

答案 0 :(得分:2)

您可以使用位于/ etc / sudoers中的sudoers文件,以允许特定用户以root身份执行命令而无需密码。

myLocalUser ALL =(ALL)NOPASSWD:/ bin / chmod

使用此行,用户myLocalUser可以以root身份执行chmod而无需密码。

但是这也会破坏系统安全性的一部分,所以要注意不要过多,并尽可能地阻止任务。

sudoers information

答案 1 :(得分:0)

sudo -S将提示符打印到stderr

如果您不想看到它,请将stderr重定向到/dev/null

  • 以下命令将stderr重定向到本地主机:
echo <password> | ssh <server> sudo -S ls 2>/dev/null

它等效于echo <password> | ssh <server> "sudo -S ls" 2>/dev/null

  • 以下命令重定向远程服务器上的stderr:
echo <password> | ssh <server> "sudo -S ls 2>/dev/null"
  • 如果需要保留stderr,但隐藏[sudo] password for ...,则可以在本地或远程计算机上使用进程替换。由于sudo提示没有换行符,因此我使用sed剪切了sudo提示。我这样做是为了保存创建的过程stderr的第一行。
# local filtering
echo <password> | ssh <server> "sudo -S ls" 2> >(sed -e 's/^.sudo[^:]\+: //')
#remote filtering
echo <password> | ssh <server> "sudo -S ls 2> >(sed -e 's/^.sudo[^:]\+: //')"