如何解决无法在同一sudo会话中执行weblogic用户下命令的问题
问题根因
你脚本中写的sudo su - weblogic会启动一个独立的交互式bash会话,当前脚本会阻塞在这一步,直到你手动退出该weblogic会话后,后续的touch、chmod命令才会继续执行——而此时执行用户已经切回原用户djaiswa2,自然没有weblogic属主路径的写入权限,所以触发权限报错。
修复方案
方案1:将待执行命令直接通过参数传给su
无需进入交互式会话,通过-c参数把要执行的命令批量传递给weblogic用户的会话执行:
#!/bin/bash sudo su - weblogic -c ' touch /opt/middleware/.ssh/authorized_keys chmod 755 /opt/middleware/.ssh/authorized_keys '
注意:如果待执行命令里包含单引号,需要提前做转义处理。
方案2:用sudo直接指定执行用户(写法更简洁)
不需要嵌套su命令,直接通过sudo的-u参数指定运行命令的用户:
#!/bin/bash sudo -u weblogic touch /opt/middleware/.ssh/authorized_keys sudo -u weblogic chmod 755 /opt/middleware/.ssh/authorized_keys
注意要提前确认djaiswa2用户的sudoers配置中,允许其无密码执行对应weblogic权限的命令,否则执行时会触发密码输入校验。
方案3:多命令场景可拆分脚本调用
如果需要以weblogic执行的命令逻辑较多,可以单独封装为独立脚本,比如存为/opt/middleware/update_ssh_key.sh,赋予执行权限后再调用:
# 单独的weblogic执行脚本 /opt/middleware/update_ssh_key.sh #!/bin/bash touch /opt/middleware/.ssh/authorized_keys chmod 755 /opt/middleware/.ssh/authorized_keys
原调用脚本写法如下:
#!/bin/bash sudo su - weblogic -s /bin/bash /opt/middleware/update_ssh_key.sh
内容的提问来源于stack exchange,提问作者Eagertolearn
相关产品推荐
相关产品推荐

