使用sshpass跨服务器执行root专属命令时参数传递异常如何解决
SSH命令参数传递问题修复方案
问题根因
原命令参数传递异常是因为su命令调用不符合规范:su执行指定命令需要搭配-c参数,未加该参数时,后续的command_must_be_run_root及参数会被识别为要切换的用户名,无法传递到目标执行命令中。
修复后的完整命令
sshpass -p 'my_password' ssh -t test-admin@my_ip "sudo su -c 'command_must_be_run_root --arguments'"
改动说明
- 新增
su的-c参数,声明后续字符串为要执行的命令内容 - 命令嵌套采用外层双引号+内层单引号的格式,避免不同层级shell解析引号时出现冲突,保证参数完整传递
可选优化方案
如果test-admin用户的sudo配置允许直接以root身份执行命令,可省略su步骤,直接调用sudo执行目标命令,写法更简洁:
sshpass -p 'my_password' ssh -t test-admin@my_ip "sudo command_must_be_run_root --arguments"
内容的提问来源于stack exchange,提问作者Mike K.
相关产品推荐
相关产品推荐

