#!/bin/bash
#####################################################
# Script de creacion de tneles SSH para conexiones #
# FTP                                               #
# Autor: Jaime Prez Crespo                         #
# Fecha: 5 de Agosto del 2003                       #
# Licencia: GPL                                     #
#####################################################

echo "Tnel FTP a travs de SSH, por Jaime Prez"
echo

CONF_FILE=$HOME/.ssh/ftp.conf

if [ -e $CONF_FILE ]; then
   # configuracin bsica del tnel
   PORTFORWARD=`cat $CONF_FILE | grep -v "#" | grep PORTFORWARD | cut -d = -f 2 | sed 's/"//g'`
   FTP_CLIENT=`cat $CONF_FILE | grep -v "#" | grep FTP_CLIENT | cut -d = -f 2 | sed 's/"//g'`
   SSHSERVER_USERNAME=`cat $CONF_FILE | grep -v "#" | grep SSHSERVER_USERNAME | cut -d = -f 2 | sed 's/"//g'`
   SSHSERVER_HOST=`cat $CONF_FILE | grep -v "#" | grep SSHSERVER_HOST | cut -d = -f 2 | sed 's/"//g'`
   FTPSERVER_HOST=`cat $CONF_FILE | grep -v "#" | grep FTPSERVER_HOST | cut -d = -f 2 | sed 's/"//g'`
   FTPSERVER_PORT=`cat $CONF_FILE | grep -v "#" | grep FTPSERVER_PORT | cut -d = -f 2 | sed 's/"//g'`
   # configuracin avanzada
   COMPRESION=`cat $CONF_FILE | grep -v "#" | grep COMPRESION | cut -d = -f 2 | sed 's/"//g'`
   BACKGROUND=`cat $CONF_FILE | grep -v "#" | grep BACKGROUND | cut -d = -f 2 | sed 's/"//g'`
else
   # no existe el fichero de configuracin, abortamos
   echo "[ERROR] No se encontr el archivo de configuracin $CONF_FILE."
   echo "[ERROR] Verifique que existe y tiene los permisos necesarios (rw-r--r--)."
   echo
   echo "Creacin del tnel abortada."
   exit 1;
fi

# configuracin realizada con xito, comprobamos si es correcta
if [ -z "$PORTFORWARD" ]; then
   echo "[ERROR] PORTFORWARD no especificado."
   CONF_OK="NO"
else
   echo "[CONF] Usando $PORTFORWARD como puerto local."
fi
if [ -z "$FTP_CLIENT" ]; then
   echo "[CONF] No se arrancar ningn cliente FTP."
else
   echo "[CONF] Usando $FTP_CLIENT como cliente FTP."
fi
if [ -z "$SSHSERVER_USERNAME" ]; then
   echo "[ERROR] SSHSERVER_USERNAME no especificado."
   CONF_OK="NO"
else
   echo "[CONF] Nombre de usuario SSH configurado como $SSHSERVER_USERNAME."
fi
if [ -z "$SSHSERVER_HOST" ]; then
   echo "[ERROR] SSHSERVER_HOST no especificado."
   CONF_OK="NO"
else
   echo "[CONF] Servidor SSH configurado como $SSHSERVER_HOST."
fi
if [ -z "$FTPSERVER_HOST" ]; then
   echo "[ERROR] FTPSERVER_HOST no especificado."
   CONF_OK="NO"
else
   echo "[CONF] Servidor FTP configurado como $FTPSERVER_HOST."
fi
if [ -z "$FTPSERVER_PORT" ]; then
   echo "[ERROR] FTPSERVER_PORT no especificado."
   CONF_OK="NO"
else
   echo "[CONF] Puerto FTP configurado como $FTPSERVER_PORT."
fi
if [ -n "$COMPRESION" ]; then
   if [ "$COMPRESION" != "-C" ]; then
      echo "[ERROR] Parmetro de COMPRESION modificado e incorrecto."
      CONF_OK="NO"
   else
      echo "[CONF] Usando compresin en el tnel."
   fi
fi
if [ -n "$BACKGROUND" ]; then
   if [ "$BACKGROUND" != "-f" ]; then
      echo "[ERROR] Parmetro de BACKGROUND modificado e incorrecto."
      CONF_OK="NO"
   else
      echo "[CONF] Abriendo tnel en segundo plano."
   fi
fi


if [ -z $CONF_OK ]; then
   echo
   echo "Configuracin exitosa, abriendo tnel..."
   if [ -n "$FTP_CLIENT" ]; then
      echo "Arrancando $FTP_CLIENT..."
      $FTP_CLIENT 2>/dev/null 1>/dev/null &
   fi
   if ssh $COMPRESION $BACKGROUND -L $PORTFORWARD:$FTPSERVER_HOST:$FTPSERVER_PORT $SSHSERVER_USERNAME@$SSHSERVER_HOST; then
      exit 0;
   else
      echo "SSH no pudo conectar a $SSHSERVER_HOST. Compruebe que la configuracin suministrada es correcta."
   fi
else
   echo
   echo "La configuracin fu errnea. Por favor revise su configuracin en $CONF_FILE."
fi
exit 1; 