Sesiones SSH no interactivas
Si no necesita tener una sesión interactiva en el servidor remoto, puede ejecutarla ssh
en 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_ASKPASS
variable de entorno en la ruta de acceso a este programa y luego ejecute ssh
la acción Automator, de esta manera:
export SSH_ASKPASS=/Users/danielbeck/pwd.sh
ssh user@hostname ls
Cuando no hay tty
, pero SSH_ASKPASS
y DISPLAY
(para X11, configurado de manera predeterminada) están configurados, SSH ejecuta el programa especificado por SSH_ASKPASS
y 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 security
su 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 ssh
línea de comando) es el comando ejecutado cuando ssh
ha 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é sshpass
y 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 security
justo 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-yourhostname
para conectarse, para que recupere e ingrese la contraseña automáticamente.
STDIN is not a terminal
. 2) Para sesiones interactivas consshpass
, la-p
opción aparentemente no hace nada. ¡Pero corrersshpass
mientrasSSH_ASKPASS
está configurado funciona!