Служба Automator для FTP

1

В настоящее время я использую SFTP на своем MacBook для передачи файлов с помощью системы моего брата Linux (Ubuntu). Каждый раз, когда нам нужно поделиться файлом, я запускаю FTP-сервер на моем Mac, выполняя следующую команду в Терминале:

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

Содержание этого скрипта следующее:

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

После этого я передаю свой локальный IP-адрес, имя пользователя и пароль моему брату, который уже подключен к моему Mac через Wi-Fi, и он использует эту информацию для установления FTP-соединения со мной и обмена файлами.

Проблема этого процесса в том, что мне нужно открывать терминал каждый раз, когда я хочу выполнить эту команду, и мне нужно ввести свой пароль там. Есть ли способ автоматизировать это, чтобы я просто щелкнул пункт меню автоматизатора в любом из моих окон Finder и ввел его программно, не открывая вручную программу терминала? Кроме того, есть ли способ убедиться, что мой брат (или любой, кому я предоставляю свое имя пользователя и пароль) может получить доступ только к определенной папке (предпочтительно, к общей папке) во время сеанса FTP и ничего больше?

Вот что я предпочитаю делать каждый раз, когда мне нужно выполнить обмен файлами с кем-то: я хотел бы иметь возможность просто щелкнуть по значку (Automator) на панели инструментов поиска, чтобы активировать FTP в моей системе. После нажатия, действие Automator должно просто открыть FTP-сервер на моем ноутбуке (пароль подается на него через сам код) и выдать всплывающее окно, подтверждающее подключение как активное с IP-адресом, который мне нужно передать моему брату, чтобы он может попытаться подключиться. Как только передача файла будет завершена, я хотел бы просто снова нажать на этот значок и получить всплывающее окно, подтверждающее, что FTP был закрыт. Это слишком сложный процесс?

TheLearner
источник

Ответы:

1

Зачем использовать Automator, если вы можете оставаться в Bash?

Я нашел действительно крутой маленький сценарий под названием appify это мгновенно превратит другие скрипты в реальные приложения. Вы можете попробовать это несколько раз, чтобы наблюдать за его поведением. Поскольку вы уже используете bash, я надеюсь, что этот ответ как альтернатива тому, о чем вы просите, является приемлемым.

Идея состоит в том, чтобы разбить ваш скрипт на 3 разных скрипта:


1: запуск службы ftp только на предпочитаемом сетевом интерфейсе
 #!/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: остановить службу 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: проверьте состояние сервиса 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

Затем примените appify сценарий к ним

То, что у вас осталось, - это три небольших приложения, которые можно вставить в док-станцию, которые при запуске запускают или останавливают службу ftp на предпочитаемом сетевом интерфейсе, или сообщают вам, что происходит с ftp, соответственно, и не требуют пароля администратора. , У меня было только время протестировать первый, поэтому, если они не работают так, как я надеюсь, то вы можете закомментировать или удалить мою логику и использовать свой метод launchctl.


chillin
источник