通过vm自动生成python脚本

时间:2018-08-29 19:11:25

标签: python python-3.x bash shell ssh

我是一家新的IT公司,这里的人很少了解Python,所以我无法寻求帮助。

问题:我需要使用Python创建一个脚本,该脚本通过ssh从我的VM连接到我的客户端服务器,使用脚本访问后,我需要找到一个日志文件并搜索一些数据。

我使用该文件的副本在Windows中测试了脚本,然后它搜索了我需要的所有内容。但是,我不知道如何通过SSH进行连接。

我尝试过这样,但是我不知道从哪里开始:

 from subprocess import Popen, PIPE
 import sys 

 ssh = subprocess.check_output(['ssh', 'my_server', 'password'], shell = True)
 ssh.stdin.write("cd /path/")
 ssh.stdin.write("cat file | grep err|error")

这将产生错误“未定义名称'subprocess'”。 我不知道如何使用子流程,也不知道如何开始开发解决方案。

注意:我无法使用Paramiko,因为我无权通过pip安装软件包或手动下载软件包。

1 个答案:

答案 0 :(得分:0)

您没有导入subprocess本身,因此您无法引用它。

check_output只是运行一个流程并等待其完成,因此您不能使用该流程来运行要与之交互的流程。但是这里没有互动,所以让我们实际使用它。

subprocess.Popen()和朋友的第一个参数是shell=True解析外壳的字符串;或直接将令牌列表传递给exec而不涉及任何外壳。 (在某些平台上,传递带有shell=True的令牌列表实际上是可行的,但这是偶然的,并且可能在将来的Python版本中更改。)

ssh myhost password将尝试在password上运行命令myhost,所以这不是您想要的。 可能您应该首先简单地为无密码SSH进行设置。

...但是您可以使用此语法一次性运行命令;只需将shell命令作为字符串传递给ssh

from subprocess import check_output
#import sys                          # Remove unused import

 result = check_output(['ssh', 'my_server',
     # Fix quoting and Useless Use of Cat, and pointless cd
     "grep 'err|error' /path/file"])