我在脚本中使用了以下命令
sudo su - user -c bash <<EOF
cp /home/test.txt /opt/
EOF
如果我在终端上使用sudo su - user
,Unix不会问我密码,但是如果我尝试运行脚本,终端会问我密码,如果我删除了EOF部分,其余的代码运行时我退出了会议。
我想在用户模式sudo中运行该命令,但终端不需要问我密码。
如果我使用
sudo su - user <<EOF
code
EOF
我在.bash_profile中出错:参数太多
答案 0 :(得分:1)
我想在用户模式sudo中运行命令,但终端不要 需要问密码。
您遇到的情况是由sudo的用户缓存凭据引起的,这允许sudo维护会话,而任何进一步的sudo命令都不会提示输入密码。
检查一下:
打开一个新终端并运行sudo whatever
,然后关闭它并打开另一个新终端并运行sudo whatever
,您会看到sudo
每次都要求输入密码......
如果您仍然需要这样做,那么您有以下选择:
阻止sudo
永久性地要求输入密码:
运行sudo visudo
并查找行root ALL=(ALL) ALL
,然后添加一行
username ALL=(ALL) NOPASSWD: ALL
然后保存并退出。
注意:这是一个安全风险
或阻止sudo
仅针对特定脚本永久性地要求输入密码:
运行sudo visudo
并查找行root ALL=(ALL) ALL
,然后添加一行
username ALL=NOPASSWD: path_to_the_script
然后保存并退出
在脚本中提供密码,方法是运行sudo
命令:
sudo -S <<< "password" command
注意:这也是一种安全风险。
答案 1 :(得分:0)
我猜你需要以不同的用户身份执行命令。这可能是您的答案:Run a shell script as another user that has no password
sudo -H -u otheruser bash -c 'echo "I am $USER, with uid $UID"'
这是该链接的引用。可能以下情况对你更好:
sudo -H -u otheruser bash <<EOF
cp /home/test.txt /opt/
EOF
更新:您可能希望创建一个特定的sudo规则来运行没有密码的特定命令(在/ etc / sudoers文件中 - 使用visudo来编辑它 - ):
otheruser ALL=NOPASSWD: /full/path/to/your_command.sh
(当然你需要root权限来编辑sudoers,我希望你能做到)。
并创建包含您的逻辑的名为your_command.sh
的脚本。然后,您将被允许在没有密码的情况下运行它:
sudo -H -u otheruser your_command.sh
我知道,它不是&#34;单行命令&#34;但它是安全的,因为它只允许一个没有密码的特定命令。当然,它并不需要密码!
答案 2 :(得分:-3)
然后不要使用sudo,那么它不会要求输入密码,但你将以root身份登录!