Servicio de automatización para FTP

1

Actualmente estoy usando SFTP en mi MacBook para realizar transferencias de archivos con el sistema Linux de mi hermano (Ubuntu). Cada vez que necesitamos compartir un archivo, inicio el servidor FTP en mi Mac ejecutando el siguiente comando en la Terminal:

  

/Users/Amit/Documents/Scriptlets/ftps.sh open

El contenido de este script es el siguiente:

#!/bin/sh
if [ $1 = 'open' ]; then
sudo -s launchctl load -w /System/Library/LaunchDaemons/ftp.plist
echo SFTP opened
fi
if [ $1 = 'close' ]; then
sudo -s launchctl unload -w /System/Library/LaunchDaemons/ftp.plist
echo SFTP closed
fi
if [ $1 = 'check' ]; then
ftp localhost
echo check
fi

Una vez hecho esto, le doy mi dirección IP local, nombre de usuario y contraseña a mi hermano que ya está conectado a mi Mac a través de wifi y él usa esa información para establecer una conexión FTP conmigo y compartir archivos.

El problema con este proceso es que necesito abrir Terminal cada vez que quiera ejecutar este comando y debo ingresar mi contraseña allí. ¿Hay alguna forma de automatizar esto de modo que simplemente haga clic en un elemento del menú del automatizador en cualquiera de mis ventanas del Finder y le proporcione la contraseña mediante programación sin abrir manualmente el programa Terminal? Además, ¿hay alguna forma de garantizar que mi hermano (o cualquier persona a la que le proporcione mi nombre de usuario y contraseña) pueda acceder solo a una carpeta designada (preferiblemente, Carpeta pública) durante la sesión de FTP y nada más?

Esto es lo que preferiría hacer cada vez que necesito compartir archivos con alguien: me gustaría poder simplemente hacer clic en el icono (Automator) en la barra de menú del buscador para activar el FTP en mi sistema. Al hacer clic, la acción de Automator debería abrir el servidor FTP en mi computadora portátil (la contraseña que se le envía a través del código mismo) y abrir una ventana emergente confirmando que la conexión está activa con la dirección IP que necesito transmitirle a mi hermano para que podría intentar conectarse. Una vez que se haya realizado la transferencia de archivos, me gustaría volver a hacer clic en el mismo icono y obtener una ventana emergente que confirma que el FTP se ha cerrado. ¿Es un proceso demasiado complicado?

    
pregunta TheLearner 10.05.2014 - 16:32

1 respuesta

1

¿Por qué usar Automator cuando puedes permanecer en bash?

Encontré un pequeño y genial script llamado appify que convertirá instantáneamente otros scripts en aplicaciones reales. Puedes intentarlo varias veces para observar su comportamiento. Como ya usa bash, espero que esta respuesta como alternativa a lo que está pidiendo sea aceptable.

La idea es dividir tu script en 3 scripts distintos:

1: iniciar el servicio ftp solo en la interfaz de red preferida
 #!/bin/bash
 #start ftp service
 #sudo="/usr/bin/sudo"
 #launchctl="/bin/launchctl"
 say="/usr/bin/say"
 networksetup="/usr/sbin/networksetup"
 tail="/usr/bin/tail"
 head="/usr/bin/head"
 cut="/usr/bin/cut"
 curl="/usr/bin/curl"
 currentInterface=$(networksetup -listnetworkserviceorder |tail +2 |head -n1 |cut -c5-12)
 getExternaladdress=$(curl ipecho.net/plain)
 SiriSays="say -v Samantha"
 #sudo -s launchctl load -w /System/Library/LaunchDaemons/ftp.plist 
 #your command will start ftp on all network interfaces
 if [ "$currentInterface" = "Airport" ]; 
      then
           networksetup -setpassiveftp Airport on
      else
           networksetup --setpassiveftp Ethernet on
 fi
 $SiriSays "ftp service has been initiated for the"
 echo $currentInterface |$SiriSays; $SiriSays "interface"
 $SiriSays "Your external IP address is"
 echo $getExternaladdress | $SiriSays
 exit
2: detener el servicio ftp
 #!/bin/bash
 #stop ftp service
 #sudo="/usr/bin/sudo"
 #launchctl="/bin/launchctl"
 networksetup="/usr/sbin/networksetup"
 say="/usr/bin/say"
 tail="/usr/bin/tail"
 head="/usr/bin/head"
 cut="/usr/bin/cut"
 currentInterface=$(networksetup -listnetworkserviceorder |tail +2 |head -n1 |cut -c5-12)
 SiriSays="say -v Samantha"
 #sudo -s launchctl unload -w /System/Library/LaunchDaemons/ftp.plist
 #your command requires sudo
 if [ "$currentInterface" = "Airport" ]; 
      then
           networksetup -setpassiveftp Airport off
      else
           networksetup -setpassiveftp Ethernet off
 fi
 $SiriSays "ftp service has been terminated"
 exit
3: verifique el estado del servicio ftp
 #!/bin/bash
 #check ftp service status
 networksetup="/usr/sbin/networksetup"
 say="/usr/bin/say"
 tail="/usr/bin/tail"
 head="/usr/bin/head"
 cut="/usr/bin/cut"
 currentInterface=$(networksetup -listnetworkserviceorder |tail +2 |head -n1 |cut -c5-12)
 SiriSays="say -v Samantha"
 if [ "$currentInterface" = "Airport" ]; 
      then
           networksetup -getpassiveftp Airport |$SiriSays
      else
           networksetup -getpassiveftp Ethernet |$SiriSays
 fi
 exit

Luego aplique el script appify a ellos

Lo que te queda son tres pequeñas aplicaciones para poner en tu dock que, cuando se inicien, iniciarán o detendrán el servicio ftp en tu interfaz de red preferida, o te dirán qué pasa con ftp, respectivamente, y no deberían ser necesarias Cualquier contraseña de administrador. Solo tuve tiempo de probar el primero, así que si no funcionan como espero, entonces puedes comentar o eliminar mi lógica y usar tu método launchctl.

respondido por el chillin 11.05.2014 - 00:36

Lea otras preguntas en las etiquetas