pythonsftpparamikoastropyfits

Opening Astropy FITS file from SFTP server


I have a Python script that ssh into a remote server using Paramiko module.

The below is my script

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("host", username="McMissile")

A FITS file on a local machine is usually opened as follows:

from astropy.io import fits

hdu = fits.open('File.fits')

I was wondering how would I open a FITS file from the SFTP server machine and store it under the variable hdu in the local machine.

I cannot download the file from the server to the local machine due to the storage constraints.


Solution

  • Astropy.io fits.open method accepts a file-like object in place of a file name:

    name : file path, file object, file-like object or pathlib.Path object


    A file-like object representing a remote file is returned by Paramiko SFTPClient.open method:

    A file-like object is returned, which closely mimics the behavior of a normal Python file object, including the ability to be used as a context manager.


    So this should work:

    sftp_client = ssh_client.open_sftp()
    with sftp_client.open('remote_filename') as remote_file:
        hdu = fits.open(remote_file)