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!STDIN is not a terminalerror. Sin embargo, esta vez no se me solicitó ninguna contraseña; Creo queSSH_ASKPASSestá funcionando en el Automator ya que, si hago que el archivoSSH_ASKPASSdevuelva la contraseña incorrecta, aparece unPermission denied, please try again.error.macOs >= 10.13Encontré una solución (gracias a Daniel Beck por proporcionar la información clave necesaria para esto). Tenga en cuenta que solo he probado esto con OS X Lion 10.7.2. Si esto no funciona para usted, pruebe la solución de Daniel.
Primero, debemos establecer la
SSH_ASKPASSvariable de entorno: su valor debe ser la ruta a un programa que imprima la contraseña a la salida estándar. Para obtener la contraseña del llavero, así es como debe verse (lo llamoget-ssh-password.sh):Un par de puntos a tener en cuenta:
Esto supone que ha almacenado la contraseña en el llavero de la manera que describí en la pregunta
El programa dado
SSH_ASKPASSse llamará sin ningún argumento; entonces usamos variables de entorno para pasarle el nombre de usuario y host.Ahora podemos configurar
SSH_PASSWORD_USERySSH_PASSWORD_HOSTNAMEejecutarsshpasspara iniciar sesión en nuestro servidor.Creé otro script
ssh-kcpass, para hacer esto:Para iniciar sesión en el servidor ssh sin escribir ninguna contraseña, solo necesita ejecutar
ssh-kcpass user@hostname.fuente
macOS >= 10.13Hola gente, me encontré con este tema buscando otra cosa pero ... No sé si me estoy perdiendo algo aquí ... pero tu enfoque me parece extraño. ¿por qué no usar la autenticación de clave pública? ... Generar una clave rsa $ ssh-keygen -t rsa -b 2048 -C 'email / id'
Lo ideal sería usar una vez el ssh-copy-id user @ host y autenticar con contraseña una vez para instalar la clave en el otro servidor, o usar cualquier tipo de script o herramienta de autorización para desplegar la clave en ~ / .ssh / Authorizedkeys en el otro host (para el usuario con el que desea iniciar sesión) Si se hace con el comando manualmente, debe editar / etc / ssh / sshd_config en consecuencia y con automatización (chef, ansible) presionaría la condiga completa para el estado deseado.
La clave que importa distribuir es id_rsa.pub, mantenga segura la clave privada
Para usar el llavero para autenticarse en los hosts de forma automática y directa, edite en su máquina el ~ / .ssh / config y agregue:
Host * UseKeychain sí
Busque más información sobre las opciones del archivo de configuración ssh, espero que esto sea útil
fuente