Automator-Service für FTP

1

Ich verwende derzeit SFTP auf meinem MacBook, um Dateiübertragungen mit dem Linux-System (Ubuntu) meines Bruders durchzuführen. Jedes Mal, wenn wir eine Datei freigeben müssen, starte ich den FTP-Server auf meinem Mac, indem ich auf dem Terminal den folgenden Befehl ausführe:

/Users/Amit/Documents/Scriptlets/ftps.sh öffnen

Der Inhalt dieses Skripts lautet wie folgt:

#!/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

Sobald dies erledigt ist, gebe ich meinem Bruder, der bereits über WLAN mit meinem Mac verbunden ist, meine lokale IP-Adresse, meinen Benutzernamen und mein Kennwort und er verwendet diese Informationen, um eine FTP-Verbindung mit mir herzustellen und Dateien auszutauschen.

Das Problem bei diesem Vorgang ist, dass ich das Terminal jedes Mal öffnen muss, wenn ich diesen Befehl ausführen möchte, und mein Kennwort dort eingeben muss. Gibt es eine Möglichkeit, dies zu automatisieren, indem ich in einem meiner Finder-Fenster auf ein Automator-Menüelement klicke und das Kennwort programmgesteuert eingebe, ohne das Terminal-Programm manuell zu öffnen? Kann ich auch sicherstellen, dass mein Bruder (oder jemand, den ich mit meinem Benutzernamen und Passwort versorge) während der FTP-Sitzung nur auf einen bestimmten Ordner (vorzugsweise auf den öffentlichen Ordner) zugreifen kann und auf nichts anderes?

Folgendes würde ich vorziehen, wenn ich eine Dateifreigabe für jemanden durchführen möchte: Ich möchte in der Lage sein, einfach auf ein (Automator-) Symbol in meiner Finder-Menüleiste zu klicken, um FTP auf meinem System zu aktivieren. Nach dem Klicken sollte die Automator-Aktion einfach den FTP-Server auf meinem Laptop öffnen (das Passwort wird ihm über den Code selbst eingegeben) und ein Popup-Fenster anzeigen, in dem bestätigt wird, dass die Verbindung mit der IP-Adresse aktiv ist, die ich an meinen Bruder weiterleiten muss, damit er könnte versuchen, eine Verbindung herzustellen. Sobald die Dateiübertragung abgeschlossen ist, möchte ich einfach noch einmal auf das gleiche Symbol klicken und ein Popup erhalten, das bestätigt, dass FTP geschlossen wurde. Ist es zu kompliziert?

TheLearner
quelle

Antworten:

1

Warum Automator verwenden, wenn Sie in der Bash bleiben können?

Ich habe ein wirklich cooles kleines Skript namens appify gefunden , das andere Skripte sofort in tatsächliche Anwendungen verwandelt. Sie können es ein paar Mal versuchen, um sein Verhalten zu beobachten. Da Sie bereits bash verwenden, hoffe ich, dass diese Antwort als Alternative zu genau dem, wonach Sie fragen, akzeptabel ist. 

Die Idee ist, Ihr Skript in 3 verschiedene Skripte aufzuteilen:


1: Starten Sie den FTP-Dienst nur auf der bevorzugten Netzwerkschnittstelle
 #!/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: Beenden Sie den FTP-Dienst
 #!/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: Überprüfen Sie den FTP-Dienststatus
 #!/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

Wenden Sie dann das Appify- Skript auf sie an

Sie müssen nur noch drei kleine Apps in Ihr Dock legen, die beim Start den FTP-Dienst auf Ihrer bevorzugten Netzwerkschnittstelle starten oder stoppen oder Ihnen mitteilen, was mit FTP los ist, und die kein Administratorkennwort erfordern sollten . Ich hatte nur Zeit, die erste zu testen. Wenn sie also nicht so funktionieren, wie ich es hoffe, können Sie meine Logik auskommentieren oder löschen und Ihre launchctl-Methode verwenden.


Chillin
quelle