【问题标题】:automated python script via vm通过 vm 自动执行 python 脚本
【发布时间】:2019-02-04 15:54:39
【问题描述】:

我是 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")

这会生成错误“名称‘子进程’未定义”。 我不明白如何使用子流程,也不了解如何开始开发解决方案。

注意:我不能使用 Paramiko,因为我没有权限通过 pip 安装包或手动下载包。

【问题讨论】:

  • 请避免"Give me the codez" 问题。而是显示您正在处理的脚本并说明问题所在。另见How much research effort is expected of Stack Overflow users?
  • 为了适应公司文化,您可能希望使用公司内更广泛使用的语言进行编程。
  • 公司让我用python,机器上的版本是3.4
  • 我不需要运行代码只是知道如何到达那里,我已经在寻找关于子进程、paramiko、python、linux 和 Popen 的官方文档,甚至尝试通过终端做大部分事情,比如 crontab 来做对我来说一些命令我也在学校里和我的老师交谈,但我很难解决这部分,因为我很少使用虚拟机
  • 因为我的脚本将不得不留在代理服务器上并在那里执行他来访问我的客户端服务器查找日志读取并在名为 zabbix 的监控工具中收集信息我觉得有点迷失,因为我只有实习生,甚至我的老板都不知道如何帮助我

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


【解决方案1】:

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

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

subprocess.Popen() 和朋友的第一个参数是 either 一个供 shell 解析的字符串,shell=True;或直接传递给exec 的令牌列表,不涉及外壳。 (在某些平台上,使用shell=True 传递令牌列表实际上是可行的,但这是巧合,可能会在未来的 Python 版本中发生变化。)

ssh myhost password 将尝试在myhost 上运行命令password,所以这不是您想要的。 可能您应该首先简单地设置无密码 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"])

【讨论】:

    猜你喜欢
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 2020-08-18
    • 2021-11-21
    • 2018-08-31
    相关资源
    最近更新 更多