使用Paramiko执行含<<<的sudo su命令报语法错误,如何解决?
问题原因
错误提示sh: 0403-057 Syntax error at line 1 : '<' is not expected是因为远程主机执行命令时使用的默认shell不支持<<<(here-string)语法(比如AIX系统的默认sh就不支持该特性,而你本地使用的是bash这类支持该语法的shell)。
解决方案
方案1:显式指定用bash执行命令
将整个命令包裹在bash -c中,强制使用bash解析语法:
cmd = """bash -c \"sudo su - user -Hic 'direct <<< \\\"command\\\"'\""""
或者调整引号写法简化转义:
cmd = 'bash -c "sudo su - user -Hic \'direct <<< \"command\"\' "'
方案2:替换here-string为兼容写法
用echo管道代替<<<,这种写法在绝大多数shell中都能正常运行:
cmd = """echo 'command' | sudo su - user -Hic direct"""
额外注意
如果sudo需要输入密码,当前代码未处理交互输入逻辑,需配合stdin.write()来输入密码(你已开启get_pty=True,满足交互基础条件),这部分可根据实际场景补充。
内容的提问来源于stack exchange,提问作者Antonio Costa
相关产品推荐
相关产品推荐

