有没有一个单行命令可以执行“su”操作?

我可以使用su <用户名>进行切换用户,然后会要求输入密码。有没有一种可以在su命令中直接指定密码而不需要提示的参数呢?
例如:su <用户名> -p <密码>

1这个问题似乎非常适合Superuser网站:http://superuser.com/ :-) - HongboZhu
你可以在这里看一下: http://stackoverflow.com/questions/233217/pass-password-to-su-sudo-ssh或者在这里: http://stackoverflow.com/questions/715908/how-do-you-make-sudo-save-the-password - HongboZhu
1我从这里得到的,superuser,http://superuser.com/questions/67765/sudo-with-password-in-one-command-line。 - alvas
3个回答

如果你想编写一个以不同用户身份运行的脚本,可以像这样做,尽管它会在标准输出中输出单词"password"而没有换行符。
su - username <<!
enterpasswordhere
enter commands to run as the new user
!

如果你有一个用户名为fred,密码为1234,并且想要以fred的身份获取fred的主目录的ls列表,而不显示密码字符串,那么它应该是这样的。
su - fred <<! >/dev/null 2>&1
1234
whoami > /dev/tty
ls > /dev/tty
!

2呃,“标准输入必须是 tty”。 - John Lawrence Aspden
我遇到了相同的错误。 - MaxV
16出现错误:su: 必须在终端中运行 - Abhishek Kashyap
1获取 su: 抱歉 - Alec Jacobson

我相信,这不是一个好主意,也不会是一个好主意。原因如下:
如果你在命令中写入密码,比如su <username> -p <password>,它将以明文形式存储在你的bash历史记录中。这无疑是一个巨大的安全问题。
如果你需要以自动化方式运行带有su(或sudo)的命令,请编写一个包含命令但不包含susudo的shell脚本,并运行su <username> script.sh

4su root script 仍需要输入密码。 - Dai Kaixian
@DaiKaixian 是的,但它并没有保存在任何地方,也没有人能够阅读它。 - Wayne_Yux
2你可以尝试类似这样的命令:echo <passwd> | sudo -S <command-line>。虽然不安全,但是它能够正常工作。 - Dai Kaixian
1我的回答的要点是,将密码写在命令中是不安全的。所以我建议不要这样做。 - Wayne_Yux
只有在你关心用户不被其他人访问时,这才是一个安全问题。例如,在我的情况下,我只是想要一个没有权限的新用户来运行一个我不信任的外部脚本。 - Jezor
只需在执行命令之前(在命令前面,开头处)使用两个空格,它将不会保存到历史记录。 - mchid

如果您想以新用户身份执行某些特定命令,请使用以下命令:
sudo -u {用户名} {要作为新用户执行的命令}

这并没有回答问题。问题是关于如何处理密码的。 - Stephen C