¿Cómo puedo usar Automator para generar un ticket kerberos usando KINIT?

Necesito poder generar un ticket kerberos para mi MacBook Pro cada vez que se reinicia la máquina. Puedo ejecutar KINIT manualmente con mis credenciales para generar un ticket. ¿Cuál es la mejor manera de automatizar ese proceso?

¿Requiere kinitalguna entrada manual de su lado?
En realidad, sí. Me pide contraseña.
¿ Usar --password-filesería una opción para ti? De lo contrario, será difícil de automatizar.
No me importa introducir la contraseña. Solo quiero ejecutar un script a través de un atajo de algún tipo (icono o teclado) que abre la aplicación de terminal, ejecuta el comando KINIT con mi parámetro de dominio y me lleva al punto de ingresar una contraseña. Si el script puede ingresar la contraseña por mí, aún mejor.

Respuestas (2)

Puede empaquetar fácilmente comandos de shell dentro de una aplicación (o servicio) de Automator usando la acción "Ejecutar script de Shell". Sin embargo, esto ejecutará los comandos en un shell no interactivo (para obtener una explicación de la diferencia entre shells interactivos y no interactivos, consulte la sección pertinente de la Guía avanzada de secuencias de comandos de Bash ; en pocas palabras, no tendrá acceso a la terminal para la solicitud de contraseña, y si kinitno es consciente de esto, su secuencia de comandos se colgará). Hay dos maneras de evitar eso:

  1. script Terminal.app para ejecutar su comando en lugar de ejecutarlo directamente. En ese caso, necesitará una acción "Ejecutar AppleScript" en su lugar, que contiene el siguiente comando:

    tell application "Terminal" to do script "kinit <options>"
    

    que abrirá una nueva pestaña de Terminal ejecutando el comando dado.

  2. use kinitla --password-fileopción y pásele la contraseña dentro de su flujo de trabajo, es decir

    echo <password> | kinit --passwordfile=STDIN <options>
    

    Para evitar almacenar su contraseña en texto sin formato dentro del flujo de trabajo, puede almacenarla de forma segura en el llavero de OS X y recuperarla desde allí. Aunque es posible a través de un script de shell (el blog de TextMate tiene detalles sobre cómo lograrlo ; asegúrese de leer los comentarios), hay tantas trampas que recomendaría usar un poco de AppleScript y la excelente aplicación Usable Keychain Scripting de Daniel Jalkut. . Una vez instalado, el siguiente fragmento de AppleScript recuperará su contraseña (suponiendo que el nombre de la cuenta sea "kinit"):

    tell application "Usable Keychain Scripting" to get password of first generic item of current keychain whose account is "kinit"
    

    O envuélvelo en un osascriptcomando de shell, es decir

    passphrase=$(osascript -e '<command above>')
    

    o, si usa Automator, agregue una acción de AppleScript, recupere la frase de contraseña que contiene y pásela al script de shell.

Gracias Kopischke! Me tomó un poco de tiempo ponerme al día con los entresijos de Automator y la sintaxis de las secuencias de comandos. Gracias a ti, pude crear una aplicación de Automator que genera un ticket de kerberos para mí. Agregué la aplicación a mis elementos de inicio de sesión para que se ejecute cada vez que inicie sesión. ¡Buuya!

Solo quiero intervenir; No me apetecía poner mi contraseña en el llavero, así que escribí un applescript rápido para recogerlo de un mensaje de usuario:

on run {input, parameters}
tell application "System Events"
    set the_username to do shell script "whoami"
    set the_password to "password"
    display dialog "Enter password" default answer "password" buttons {"OK", "Cancel"} default button "OK" with icon 2 with title "SLAC Kerberos" with hidden answer
    set the_password to text returned of the result
end tell
return {the_username, the_password}
end run

por supuesto, probablemente también quieras poner el dominio en tu nombre de usuario. y luego, desde un script de shell, puede hacer algo como:

echo $2 | kinit --password-file=STDIN $1

lo que sería bueno sería verificar la salida del script de Shell para verificar si hay contraseñas incorrectas, etc.