【问题标题】:How can I see contents of gzip file with paramiko?如何使用 paramiko 查看 gzip 文件的内容?
【发布时间】:2016-06-08 12:23:23
【问题描述】:

如下所示连接到远程服务器后,

transport.connect(username=username, password=password)
sftp = paramiko.SFTPClient.from_transport(transport)

我可以通过sftp.listdir() 看到远程服务器上有一些gzip 文件,例如example.gz.2016。如何通过 sftp 连接访问该文件的文本,而不实际下载该文件?

【问题讨论】:

  • 这是不可能的,但您可以通过 SSH 使用常用的控制台命令列出它们。
  • 为什么这不可能?
  • 它不是 SFTP 协议的一部分。您可以在tools.ietf.org/html/draft-ietf-secsh-filexfer-13 查找所有可能的功能

标签: python bash networking gzip paramiko


【解决方案1】:

您的问题分为两部分:

  1. 如何从命令行查看 zip 文件的内容
  2. 如何使用python&paramiko执行远程命令并获取输出

First 事情第一:如何在控制台上列出 zip 文件的内容。 less can look into zip files,因此在您的情况下,执行 less example.gz.2016 应该会为您提供 zip 存档中的文件列表

第二:如何远程执行命令。

import paramiko
ssh = paramiko.SSHClient()
# next is needed if your keys are not yet known on the client.
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(HOST_NAME, username=USER, password=PASSWORD)

stdin, stdout, stderr = ssh.exec_command('less ' + zipfilename)
for line in stdout.readlines():
    # here you will have your listing
    print (line)

for errline in stderr.readlines():
    # Don't forget to check the error output
    print ('***', errline)

祝你好运!

编辑 如果您需要到同一台服务器的 sFTP 连接,则需要像这样从 ssh 连接中获取它

sftp = ssh.open_sftp()

【讨论】:

  • 当我尝试这个时,我得到了异常paramiko.ssh_exception.SSHException: Channel closed.。我该如何解决?
  • @Someone_Else:很难说.. 你确定你的服务器正在运行 ssh 吗?
  • 我认为是?执行nmap -p22 -Pn remotehost.com 确实有效(尽管 nmap -p22 remotehost.com 没有,所以谁知道)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-17
  • 1970-01-01
  • 2011-04-05
  • 2021-05-30
  • 1970-01-01
  • 2018-01-11
相关资源
最近更新 更多