En realidad, Automator no es una mala opción para esto, ya que te permite combinar AppleScript y shell scripting sin tener que mezclarlos (lo que te lleva directamente al infierno de la fuga, tras una breve estancia en el purgatorio de las citas) y pasar valores entre ellos de forma ordenada. También, además de una aplicación droplet, Automator te permitirá crear un Servicio con una excelente integración en Finder:
-
Cree un nuevo flujo de trabajo de Automator.
- seleccione "Aplicación" cuando se le pregunte qué tipo de flujo de trabajo desea crear, con lo que obtendrá un droplet que procese los archivos y carpetas que le envíe, o
- seleccione "Servicio" y establezca "Acepta seleccionados" a "archivos y carpetas" - eso le dará un elemento en los Servicios del Finder y el menú contextual de archivos y carpetas (todas las traducciones son aproximadas, estoy en un sistema alemán).
-
Añade una acción "Ejecutar AppleScript" y edita su contenido como sigue:
on run {input, parameters}
try
tell application "System Events" to set thePassword to text returned of (display dialog "Please input your password for OpenSSL encryption" default answer "" with hidden answer)
on error errorMessage number errorNumber
if errorNumber is -128 then quit me -- user has canceled
error errorMessage number errorNumber
end try
return (thePassword as list) & input
end run
- esto solicitará al usuario la contraseña de encriptación y la pasará como primer argumento a la siguiente acción.
-
Añade una acción "Ejecutar Shell script", configurándola para que obtenga su entrada a través de argumentos (no stdin
, como es el caso por defecto). Asegúrese de que el intérprete de comandos está configurado para /bin/bash
. Edita el contenido del script como sigue:
[[ -n $1 ]] && password="$1" && shift || exit 0
for f in "$@"; do
if [[ ${f##*.} = "encrypted" ]]; then
fname="${f%.encrypted}"
openssl enc -d -aes-256-cbc -salt -in "$f" -out "$fname".tar.gz -pass pass:$password || continue
tar -xPf "$fname".tar.gz && rm "$fname".tar.gz || continue
else
fname=$([[ -f $f ]] && printf "${f%.*}" || printf "$f")
tar -czPf "$fname".tar.gz "$f" || continue
openssl enc -aes-256-cbc -salt -in "$fname".tar.gz -out "$fname".encrypted -pass pass:$password && rm -f "$fname".tar.gz || continue
fi
done
- esto descifrará y desarticulará-gzip .encrypted
archivos, tar-gzip y encriptar todos los demás archivos y directorios con encriptación AES 256-CBC y la contraseña dada.
Caveat Empteor: el manejo de errores es primitivo (básicamente, el for
salta una iteración cuando encuentra un error), no hay registro y no hay seguridad contra la introducción de contraseñas erróneas (es posible que quieras preguntar dos veces y comparar los resultados, como hace la utilidad del shell). Sin embargo, no deberían ocurrir desastres, ya que los archivos sólo se eliminan cuando los pasos anteriores se completan con éxito.
Por último, es posible que desee investigar alternativas a la solicitud de una contraseña: un archivo de frase de contraseña en una llave USB, por ejemplo (utilice -pass file:/Volumes/volname/passfile
en lugar de -pass pass:$password
, omitir el paso de Applescript y eliminar la primera línea del shell script), o almacenar su contraseña en el llavero de OS X y recuperarla mediante programación (véase esta respuesta mía en Intercambio de pilas para saber cómo hacerlo).