Learning Python Network Programming

(Sean Pound) #1
Chapter 5

Transferring files through SFTP


SSH can be used effectively for securely transferring files between two computer
nodes. The protocol used in this case is the secure file transfer protocol (SFTP). The
Python paramiko module will supply the classes required for creating the SFTP
session. This session can then perform a regular SSH login.


ssh_transport = paramiko.Transport(hostname, port)
ssh_transport.connect(username='username', password='password')

The SFTP session can be created from the SSH transport. The paramiko's working in
the SFTP session will support the normal FTP commands such as get().


sftp_session = paramiko.SFTPClient.from_transport(ssh_transport)
sftp_session.get(source_file, target_file)

As you can see, the SFTP get command requires the source file's path and the target
file's path. In the following example, the script will download a test.txt file, which
is located on the user's home directory, through SFTP:


#!/usr/bin/env python3

import getpass
import paramiko

HOSTNAME = 'localhost'
PORT = 22
FILE_PATH = '/tmp/test.txt'

def sftp_download(username, password, hostname=HOSTNAME,
port=PORT):
ssh_transport = paramiko.Transport(hostname, port)
ssh_transport.connect(username=username, password=password)
sftp_session =
paramiko.SFTPClient.from_transport(ssh_transport)
file_path = input("Enter filepath: ") or FILE_PATH
target_file = file_path.split('/')[-1]
sftp_session.get(file_path, target_file)
print("Downloaded file from: %s" %file_path)
sftp_session.close()

if __name__ == '__main__':
hostname = input("Enter the target hostname: ")
port = input("Enter the target port: ")
username = input("Enter yur username: ")
password = getpass.getpass(prompt="Enter your password: ")
sftp_download(username, password, hostname, int(port))
Free download pdf