我是一家新的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安装软件包或手动下载软件包。
答案 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"])