Sesiones SSH no interactivas
Si no necesita tener una sesión interactiva en el servidor remoto, puede ejecutarla sshen un entorno sin tty, por ejemplo, como parte de una acción Ejecutar script de Shell en Automator .
Debe crear un programa que, cuando se le llame, imprima la contraseña a la salida estándar, por ejemplo, el siguiente script bash que debe hacer ejecutable usando chmod +x pwd.sh:
#!/usr/bin/env bash
echo "password"
Luego, establezca la SSH_ASKPASSvariable de entorno en la ruta de acceso a este programa y luego ejecute sshla acción Automator, de esta manera:
export SSH_ASKPASS=/Users/danielbeck/pwd.sh
ssh user@hostname ls
Cuando no hay tty, pero SSH_ASKPASSy DISPLAY(para X11, configurado de manera predeterminada) están configurados, SSH ejecuta el programa especificado por SSH_ASKPASSy utiliza su salida como contraseña. Está destinado a ser utilizado en entornos gráficos, de modo que pueda aparecer una ventana pidiéndole su contraseña. En este caso, simplemente omitimos la ventana, devolviendo la contraseña de nuestro programa. En securitysu lugar, puede usar para leer desde su llavero, así:
#!/usr/bin/env bash
security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2
ls(en la sshlínea de comando) es el comando ejecutado cuando sshha iniciado sesión, y su salida se imprime en Automator. Por supuesto, puede redirigirlo a un archivo para registrar la salida del programa que inicia.
Sesiones interactivas de SSH usando sshpass
Descargué, compilé e instalé sshpassy funcionó perfectamente. Esto es lo que hice:
- Obtén las herramientas para desarrolladores de Apple
- Descargar y abrir
sshpass-1.05.tar.gz
- Abra un shell en el directorio
sshpass-1.05
- correr
./configure
- correr
make
- Ejecutar
make install(es posible que lo necesite sudo)
Ahora el programa está instalado en /usr/local/bin/sshpass. Ejecute usando una línea como la siguiente:
sshpass -pYourPassword ssh username@hostname
Puede leer la contraseña securityjusto antes de hacerlo y usarla así:
SSHPASSWORD=$( security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2 )
sshpass -p"$SSHPASSWORD" ssh username@hostname
Envuelva esto en una función de shell y puede simplemente escribir, por ejemplo, ssh-yourhostnamepara conectarse, para que recupere e ingrese la contraseña automáticamente.
STDIN is not a terminal. 2) Para sesiones interactivas consshpass, la-popción aparentemente no hace nada. ¡Pero corrersshpassmientrasSSH_ASKPASSestá configurado funciona!