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!STDIN is not a terminal
error. Sin embargo, esta vez no se me solicitó ninguna contraseña; Creo queSSH_ASKPASS
está funcionando en el Automator ya que, si hago que el archivoSSH_ASKPASS
devuelva la contraseña incorrecta, aparece unPermission denied, please try again.
error.macOs >= 10.13
Encontré 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_ASKPASS
variable 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_ASKPASS
se llamará sin ningún argumento; entonces usamos variables de entorno para pasarle el nombre de usuario y host.Ahora podemos configurar
SSH_PASSWORD_USER
ySSH_PASSWORD_HOSTNAME
ejecutarsshpass
para 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.13
Hola 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