在远程SSH服务器上读取tar文件,而不使用Python中的FTP

时间:2017-03-21 09:40:48

标签: python ssh ftp tar

我正在远程服务器上创建一些tar文件,我希望能够将它传到我的机器上。出于安全原因,我无法在该服务器上使用FTP。

所以我怎么看,我有两个选择:

  1. 以其他方式获取文件(作为文件)然后使用tarfile库 - 如果是这样,我需要帮助来获取没有FTP的文件。

  2. 获取文件的内容,然后将其解压缩。

  3. 如果有其他方式,我想听听。

    import spur
    
    #creating the connection
    shell = spur.SshShell(
        hostname=unix_host,
        username=unix_user,
        password=unix_password,
        missing_host_key=spur.ssh.MissingHostKey.accept
        )
    
    # running ssh command that is creating a tar file on the remote server
    with shell:
        command = "tar -czvf test.gz test"
        shell.run(
            ["sh", "-c", command],
            cwd=unix_path
            )
    
        # getting the content of the tar file to gz_file_content
        command = "cat test.gz"
        gz_file_content = shell.run(
            ["sh", "-c", command],
            cwd=unix_path
            )
    

    更多信息: 我的项目是在virtualenv上运行的。我使用的是Python 3.4。

1 个答案:

答案 0 :(得分:2)

如果您具有SSH访问权限,则可以获得99%的SFTP访问权限。

因此您可以使用SFTP下载文件。请参阅Download files over SSH using Python

或者在使用支线后,请参阅其SshShell.open method

  

例如,要通过SSH复制二进制文件,假设您已经有SshShell的实例:

with ssh_shell.open("/path/to/remote", "rb") as remote_file:
    with open("/path/to/local", "wb") as local_file:
        shutil.copyfileobj(remote_file, local_file)

SshShell.open方法使用SFTP(通过Paramiko库)。