Transferring files from cherry-creek using compute node when you cannot initiate transfer from a compute node directly to the remote system due to firewall or non-public ip address issue.

This article assues you are connecting from a workstation or server running linux or similar os, which can run a ssh server, rsync server, netcat listener etc.

First create a public key on cherry-creek and setup your remote system so that the key can be used to login to the remote system.

on cherry-creek:

ssh-keygen -t ed25519 -f {filename}
this creates the private key named {filename} and public key named {filename}.pub

on remote system:
Place contents of {filename.pub} in your .ssh/authorized_keys file. If you wish you can limit the key to allow login only from the local host by beginning it with from="127.0.0.1"

choose a non-privileged port (1024-65535) not in use on cherry-creek. If you choose a port already in use the following command will complain that it couldn't open the requested port, terminate the connection and try another port. For this example we will use 31234

ssh -R '*:31234:127.0.0.1:22' {cherry-creek username}@cherry-creek

This opens a session to cherry-creek and sets up a tunnel from cherry-creek port 31234 back to the remote system's port 22

on cherry-creek:
verify that the session will work

ssh -p 31234 {username on remote system}@cherry-creek.ibnet
If remote system is setup properly this should open a terminal on the remote system.

start an interactive session to a compute node and initiate transfer

qsub -I -l ncpus=2,mem=120gb,cput=200:0:0,walltime=100:0:0 /bin/bash
cd {location where the directory you wish to tranfer is}
tar cf - {directory name} | ssh -p 31234 cherry-creek.ibnet dd of={filename.tar}