如何用单行Shell命令切换用户?尝试su命令失败求助
如何通过单条命令切换用户并自动输入密码
我明白你想直接用一条命令切换到jboss用户并自动填入密码的需求——你之前尝试的su - jboss -p jboss@123和su - jboss / jboss@123之所以失败,核心原因是**su命令本身不支持通过命令行参数直接传递密码**,它的-p参数其实是用来保留当前环境变量的,不是用来输入密码的。
下面给你几个可行的解决方案:
方案1:用echo管道配合su
你可以通过管道把密码传递给su命令,命令格式如下:
echo 'jboss@123' | su - jboss
⚠️ 注意:
- 这种方式会把密码暴露在命令历史中,其他能查看你命令历史的用户可以直接看到密码,安全性很低。
- 部分系统可能需要使用
su -m jboss来保留环境变量;如果需要切换后直接执行特定命令,可以用su - jboss -c "your_target_command"。
方案2:使用sudo(推荐,更安全)
如果你的当前用户有sudo权限,用sudo切换用户是更稳妥的选择:
免密切换(最佳实践)
先通过visudo编辑sudoers文件(一定要用visudo,避免语法错误导致sudo失效),添加以下内容:
your_current_username ALL=(jboss) NOPASSWD: ALL
保存后,你就可以直接用这条命令切换到jboss用户:
sudo -u jboss -i
-i参数会模拟jboss用户的登录环境,和su - jboss的效果完全一致。
需要输入密码的sudo方式
如果不想设置免密,也可以用管道传递密码给sudo:
echo 'your_current_user_password' | sudo -u jboss -i
不过同样要注意,密码会出现在命令历史里,不建议在生产环境使用。
重要提醒
无论是su还是sudo的管道传密码方式,都会把明文密码留在命令历史、进程列表中,这会带来很大的安全风险——任何能访问你系统的用户都可能获取到密码。所以优先推荐设置免密sudo的方式。
内容的提问来源于stack exchange,提问作者vivek bangare
相关产品推荐
相关产品推荐

