使用Python在Vertica中执行远程命令

时间:2016-06-15 14:07:36

标签: python ssh vertica

我正在尝试执行这样的远程命令:

ssh root@192.168.1.2 'su - vertica -c "vsql -c \"select * from tableName where timestamp > '2016-05-15 00:00:00' limit 1 \" "'"

它给了我一个错误

ERROR 4856:  Syntax error at or near "00" at character 61
LINE 1: ...rom tableName where timestamp > 2016-05-15 00:00:00 l...

虽然我直接在远程计算机上执行此查询,但它的工作正常。

有人可以提供任何线索吗?

1 个答案:

答案 0 :(得分:0)

在ssh命令中,您不需要那些外部引号。这应该工作正常(我还修复了你最后的一些引用错误):

ssh root@192.168.1.2 su - vertica -c "vsql -c \"select * from tableName where timestamp > '2016-05-15 00:00:00' limit 1 \" "

我觉得我真的不得不提到这里,但你不应该这样做。为什么ssh到root帐户在另一个用户下运行作业?为什么不直接ssh到该用户?创建一个私钥,将public添加到authorized_keys列表中,然后执行以下操作:

ssh vertica@192.168.2.1 /opt/vertica/bin/vsql -c \"select \* from tableName where timestamp \> \'2016-05-15 00:00:00\' limit 1 \"

请注意,我在此版本中转义了更多字符。

如果您需要,唯一的技巧将是您的shell变量。您可能需要运行bash或使用.bashrc(尽管在某些发行版中会被警告,但.bashrc中有一个块可能需要修复非交互式shell。)