SFTP Automation

You can use this python script to mirror all files you have available within IDC SFTP to a location on your machine.​

How to use the script:

  • Fill-in required information – username, the path to the private key and the password for the private key
  • install the latest version of the paramiko package
pip.exe install --upgrade paramiko
  • OPTIONAL – Adjust the Configuration, such as download path​
  • Execute the script​
import os​
import stat​
import paramiko # Third-party SFTP library​
​
# Configuration​
SFTP_HOST = 'sftp.idc.com'​
SFTP_PORT = 22​
REMOTE_ROOT = '/' # Root location within the SFTP server, keep as '/' to download all files​
LOCAL_ROOT = 'sftp-download' # Root location within local system where files will be downloaded​
SKIP_EXISTING_FILES = True # Do not download files that are already present locally​
​
# Credentials​ - use a secret store or an environment variable to store the credentials
# Storing those in a script is dangerous and not recmmended 
USERNAME = '<username>' # IDC provided username​
PRIVATE_KEY_PATH = '/' # Filesystem path to IDC provided SSH key​
PRIVATE_KEY_PASSWORD = '<ssh key password>' # IDC provided ssh key password​

def connect_sftp():​
key = paramiko.RSAKey.from_private_key_file(PRIVATE_KEY_PATH, password=PRIVATE_KEY_PASSWORD)​
transport = paramiko.Transport((SFTP_HOST, SFTP_PORT))​
transport.connect(username=USERNAME, pkey=key)​
return paramiko.SFTPClient.from_transport(transport)​

def mirror_dir(sftp, remote_path, local_path):​
os.makedirs(local_path, exist_ok=True)​
for item in sftp.listdir_attr(remote_path):​
remote_item_path = os.path.join(remote_path, item.filename).replace('\\', '/')​
local_item_path = os.path.join(local_path, item.filename)​
if stat.S_ISDIR(item.st_mode):​
mirror_dir(sftp, remote_item_path, local_item_path)​
else:​
if SKIP_EXISTING_FILES and os.path.exists(local_item_path):​
print(f"Skipping existing: {local_item_path}")​
continue​
print(f"Downloading: {remote_item_path} -> {local_item_path}")​
sftp.get(remote_item_path, local_item_path)

def main():​
sftp = connect_sftp()​
try:​
mirror_dir(sftp, REMOTE_ROOT, LOCAL_ROOT)​
finally:​
sftp.close()​

if __name__ == '__main__':​
main()

 
Tip: You can schedule the script to run e.g., every midnight, so that you always have your local folder synchronized with IDC SFTP server.

Need Help Getting Started?

For any technical issues or questions, you can reach out to IDC’s support team via

  • Email at idc_support@idc.com (preferred)
  • Phone +1 508-935-4323. If no one will be available to pick up the phone leave a message and it will be directed to the support team who will get back to you.