2017-08-26 9 views
1

私はsftpサーバーからファイルをダウンロードするにはpython sftpクライアントが必要です。私はパラミコを使い始めた。 KBの小さなファイルは正常に動作しますが、600 MBのファイルをダウンロードしようとすると、20 MBのファイルをダウンロードした後、無期限にハングします。問題が何であるか把握できません。ウィンドウサイズを大きくしても問題は解決しませんでした。どんな助けでも大歓迎です!私は同様の問題を解決するために二つのことでしたparamikoが所有した後に取得20 MBのファイル

host = config.getsafe(section, "host") 
username = config.getsafe(section, "username") 
port = config.getsafe(section, "port") 
remote_dir = config.getsafe(section, "remote_dir") 
download_dir = config.getsafe(section, "download_dir") 
archive_dir = config.getsafe(section, "archive_dir") if config.has_option(section, "archive_dir") else \ 
    None 
password = config.getsafe(section, "password") if config.has_option(section, "password") else None 
file_pattern = config.getsafe(section, "file_pattern") if config.has_option(section, "file_pattern") \ 
    else "*" 
passphrase = config.getsafe(section, "passphrase") if config.has_option(section, "passphrase") else None 
gnupg_home = config.getsafe(section, "gnupg_home") if config.has_option(section, "gnupg_home") else None 

ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect(hostname=host, port=int(port), username=username, password=password) 

sftp = ssh.open_sftp() 
sftp.sshclient = ssh 

sftp.get("/SFTP/PL_DEV/test.dat", "C:/import/download/test.dat") 
+0

パケットキャプチャ(Wiresharkを使用)を実行して、何が起こっているのかを正確に調べます。また、スタンドアロンのSFTPクライアントを使用して同じファイルをダウンロードし、そのファイルが動作するかどうか確認してください。 –

+0

filezillaのようなスタンドアロンのsftpクライアントは完全に動作します – Ram

答えて

0

  1. increase window size - あなたはあまりにもすることを試みた言います。私にとって、これは半分GBに数十MB単位で取得するために役立ったが、ノーさらに

  2. effectively disable rekeying - これは、セキュリティの意味を持っていますが、奇妙な窓のSFTPサーバからGBを超えるファイルを取得するために私を助けたかもしれません

    with paramiko.Transport((_SFTP['host'], 22)) as transport: 
        # SFTP FIXES 
        transport.default_window_size=paramiko.common.MAX_WINDOW_SIZE 
        transport.packetizer.REKEY_BYTES = pow(2, 40) # 1TB max, this is a security degradation! 
        transport.packetizer.REKEY_PACKETS = pow(2, 40) # 1TB max, this is a security degradation! 
        #/SFTP FIXES 
    
        transport.connect(username=_SFTP['user'], password=_SFTP['password']) 
         with paramiko.SFTPClient.from_transport(transport) as sftp: 
          listdir = sftp.listdir() 
          # ... 
          sftp.get(remotepath=filename, localpath=localpath) 
    
+0

私は〜2GBの後にこのメソッドを使って転送が遅くなることを付け加えます: –

関連する問題