Servizio di automazione per FTP

1

Attualmente sto usando SFTP sul mio MacBook per eseguire trasferimenti di file con il sistema Linux (Ubuntu) di mio fratello. Ogni volta che abbiamo bisogno di condividere un file, avvio il server FTP sul mio Mac eseguendo il seguente comando su Terminale:

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

Il contenuto di questo script è il seguente:

#!/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 volta terminato, fornisco il mio indirizzo IP locale, il nome utente e la password a mio fratello che è già connesso al mio Mac tramite Wi-Fi e utilizza tali informazioni per stabilire una connessione FTP con me e condividere file.

Il problema con questo processo è che ho bisogno di aprire Terminal ogni volta che voglio eseguire questo comando e ho bisogno di inserire la mia password lì. C'è un modo per automatizzare questo in modo che faccio semplicemente clic su una voce di menu di un automatore su una delle mie finestre del Finder e lo passo a livello di codice della password senza aprire manualmente il programma Terminal? Inoltre, esiste un modo per garantire che mio fratello (o chiunque fornisca il mio nome utente e password) sia in grado di accedere solo a una cartella designata (preferibilmente, cartella pubblica) durante la sessione FTP e nient'altro?

Ecco cosa preferirei fare ogni volta che ho bisogno di eseguire una condivisione di file con qualcuno: mi piacerebbe poter semplicemente cliccare su un'icona (Automator) sulla mia barra dei menu finder per attivare l'FTP sul mio sistema. Facendo clic, l'azione di Automator dovrebbe semplicemente aprire il server FTP sul mio laptop (la password viene alimentata attraverso il codice stesso) e lanciare un popup che conferma la connessione attiva con l'indirizzo IP che ho bisogno di inoltrare a mio fratello così lui potrebbe tentare di connettersi. Una volta terminato il trasferimento del file, vorrei semplicemente fare di nuovo clic sulla stessa icona e ottenere un popup che confermi che l'FTP è stato chiuso. È troppo complicato un processo?

    
posta TheLearner 10.05.2014 - 16:32
fonte

1 risposta

1

Perché utilizzare Automator quando si può rimanere in bash?

Ho trovato uno script molto interessante chiamato appify che trasformerà immediatamente altri script in applicazioni reali. Puoi provarlo alcune volte per osservare il suo comportamento. Dato che usi già bash, spero che questa risposta sia un'alternativa esattamente a ciò che chiedi sia accettabile.

L'idea è quella di dividere il tuo script in 3 script distinti:

1: avviare il servizio ftp solo sull'interfaccia di rete preferita
 #!/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: interrompere il servizio 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: controlla lo stato del servizio 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

Quindi applica lo script appify a loro

Ciò che ti rimane sono tre piccole app da inserire nel tuo dock che, una volta avviato, avvieranno o interromperanno il servizio ftp sulla tua interfaccia di rete preferita, o ti diranno cosa succede con ftp, rispettivamente, e non dovrebbero richiedere qualsiasi password di amministratore. Ho solo avuto il tempo di testare il primo, quindi se non funzionano come spero lo facciano, puoi commentare o eliminare la mia logica e usare il tuo metodo launchctl.

risposta data 11.05.2014 - 00:36
fonte

Leggi altre domande sui tag