我正在尝试执行这个命令:
echo hello | sudo su - dp-postgres
但我明白这一点:
-bash: line 1: hello: command not found
我也尝试过这个:
sudo su - dp-postgres -c 'echo hello'
但这是要求我输入当前用户的密码。
我需要切换到dp-postgres
,然后以dp-postgres
用户身份执行任何命令。
答案1
sudo
命令允许以其他用户身份执行命令。默认情况下,它会要求输入当前用户密码,这是正常行为(显然,用户还必须具有sudo
使用权限)。如果您想阻止询问密码的行为,您需要更改/etc/sudoers
文件并使用NOPASSWD
选项,这将允许您在不要求输入密码的情况下运行 sudo。
对于你的命令,你可以执行以下操作:
sudo su - dp-postgres <<-EOF
echo hello
EOF
你的第二个命令也应该有效:
sudo su - dp-postgres -c 'echo hello'
以下是一个例子:
$ sudo su - -c 'echo hello; id'
hello
uid=0(root) gid=0(root) groups=0(root)
我这边不需要密码,因为初始用户在sudo
组中,并且具有类似以下内容:
%sudo ALL=(ALL:ALL) NOPASSWD:ALL
在/etc/sudoers
文件中。
答案2
正如其他地方所写,该sudo
命令允许适当授权的用户以其他人的身份执行命令。默认情况下,此其他人是 root,但(经授权)可以是任何用户。此外,默认情况下sudo
会要求输入当前用户的密码。
如果您想以用户echo hello
身份运行该命令dp-postgres
,您可以执行以下操作:
sudo -u dp-postgres echo hello
如果需要设置登录环境,请包括-i
:
sudo -iu dp-postgres echo hello
请注意,这两个示例不会先更改为用户root
,然后再更改为用户dp-postgres
,因此您可以选择设置自定义sudoers
条目以允许此dp-postgres
用户访问但不允许访问root
。 对于应该限制和/或管理访问的多用户环境,这是一个很好的解决方案root
。 (但是,我注意到您已经可以访问root
,因此您不会通过第二个更严格的条目获得任何东西。)