如何通过Bash脚本经SSH以su -身份执行远程服务器上的指定脚本(无sudo环境)
解决远程执行su -后运行脚本的问题
我懂你遇到的问题了——你原来的命令里,su -会启动一个交互式的root shell,只有当你手动退出这个shell之后,后面的&& /home/$USERNAME/firstboot/firstboot.sh才会尝试执行,但这时候SSH连接已经断开了,脚本根本没机会运行。
要解决这个问题,你需要让su -直接执行指定的脚本,而不是进入交互式shell。可以用su的-c参数来实现,这个参数允许你指定切换到root身份后要执行的命令,同时还能保留su -加载root环境的特性(这也是你要求的核心,不能省略-)。
可行命令示例
直接修改你的SSH命令如下:
ssh -t $USERNAME@$IP "su - -c '/home/$USERNAME/firstboot/firstboot.sh'"
命令细节解释
su -:保持你需要的root环境加载(这是脚本正常运行的前提,必须保留-)-c '/path/to/script.sh':告诉su切换到root后,立即执行引号内的脚本命令-t:SSH的这个参数会分配伪终端,确保su的密码提示能正常显示(如果需要输入root密码的话)
额外注意事项
- 权限与路径确认:确保远程服务器上的
/home/$USERNAME/firstboot/firstboot.sh确实存在,并且对root用户有执行权限(可以提前用chmod +x /home/$USERNAME/firstboot/firstboot.sh设置) - 密码交互:执行命令时,远程服务器会提示你输入root密码,输入完成后脚本就会自动运行
- 交互式脚本适配:因为已经用了
-t参数分配伪终端,脚本如果有交互步骤,应该能正常响应
内容的提问来源于stack exchange,提问作者Jeremyy44
相关产品推荐
相关产品推荐

