代码之家  ›  专栏  ›  技术社区  ›  Denis

带sftp的paramiko sshclient

  •  43
  • Denis  · 技术社区  · 14 年前

    如何让SFTP通过 SSHClient SSH客户端 ?

    1 回复  |  直到 6 年前
        1
  •  168
  •   evandrix    5 年前

    paramiko.SFTPClient

    示例用法:

    import paramiko
    paramiko.util.log_to_file("paramiko.log")
    
    # Open a transport
    host,port = "example.com",22
    transport = paramiko.Transport((host,port))
    
    # Auth    
    username,password = "bar","foo"
    transport.connect(None,username,password)
    
    # Go!    
    sftp = paramiko.SFTPClient.from_transport(transport)
    
    # Download
    filepath = "/etc/passwd"
    localpath = "/home/remotepasswd"
    sftp.get(filepath,localpath)
    
    # Upload
    filepath = "/home/foo.jpg"
    localpath = "/home/pony.jpg"
    sftp.put(localpath,filepath)
    
    # Close
    if sftp: sftp.close()
    if transport: transport.close()
    
        2
  •  8
  •   Alon Gouldman    5 年前

    如果您有SSHClient,也可以使用 open_sftp()

    import paramiko
    
    
    # lets say you have SSH client...
    client = paramiko.SSHClient()
    
    sftp = client.open_sftp()
    
    # then you can use upload & download as shown above
    ...
    
        3
  •  1
  •   Martin Prikryl    4 年前

    Transport 类,它绕过了主机密钥验证,这是一个安全缺陷,因为它使代码容易受到攻击 Man-in-the-middle attacks .

    更好的方法是使用正确的Paramiko SSH API SSHClient ,验证主机密钥:

    import paramiko
    paramiko.util.log_to_file("paramiko.log")
    
    ssh = paramiko.SSHClient()
    ssh.connect(host, username='user', password='password')
    # or 
    # key = paramiko.RSAKey.from_private_key_file('id_rsa')
    # ssh.connect(host, username='user', pkey=key)
    
    sftp = ssh.open_sftp()
    
    sftp.get(remotepath, localpath)
    # or
    sftp.put(localpath, remotepath2)
    

    有关验证主机密钥的详细信息,请参阅:
    Paramiko "Unknown Server"

        4
  •  0
  •   David W.    4 年前

    from paramiko import Transport, SFTPClient, RSAKey
    key = RSAKey(filename='path_to_my_rsakey')
    con = Transport('remote_host_name_or_ip', 22)
    con.connect(None,username='my_username', pkey=key)
    sftp = SFTPClient.from_transport(con)
    sftp.listdir(path='.')