我尝试运行脚本而不成为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
答案 0 :(得分:2)
您可以使用位于/ etc / sudoers中的sudoers文件,以允许特定用户以root身份执行命令而无需密码。
myLocalUser ALL =(ALL)NOPASSWD:/ bin / chmod
使用此行,用户myLocalUser可以以root身份执行chmod而无需密码。
但是这也会破坏系统安全性的一部分,所以要注意不要过多,并尽可能地阻止任务。
答案 1 :(得分:0)
sudo -S
将提示符打印到stderr
。
如果您不想看到它,请将stderr
重定向到/dev/null
echo <password> | ssh <server> sudo -S ls 2>/dev/null
它等效于echo <password> | ssh <server> "sudo -S ls" 2>/dev/null
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[^:]\+: //')"