GNU/Linux >> Tutoriales Linux >  >> Linux

Ssh:¿cómo ejecutar Ssh-add automáticamente, sin solicitar una contraseña?

Quiero comunicarme entre varias computadoras en mi red (Ethernet estática), a través de SSH. Para hacer eso, necesito ejecutar ssh-add cada vez que inicio sesión en una máquina específica, ¿cómo puedo hacerlo para que se configure una vez y no me pida la frase de contraseña cada vez que inicie sesión o reinicie? mi máquina?

Sé que hay una forma de agregar algunas líneas al bash_profile archivo, pero aún necesito escribir la contraseña cada vez que reinicio/inicio sesión en una máquina específica.

if [ -z "$SSH_AUTH_SOCK" ] ; then
  eval `ssh-agent -s`
  ssh-add
fi

Respuesta aceptada:

Este es un ejemplo típico de una compensación entre seguridad y conveniencia. Por suerte hay varias opciones. La solución más adecuada depende del escenario de uso y del nivel de seguridad deseado.

clave ssh con frase de contraseña, no ssh-agent

Ahora se debe ingresar la frase de contraseña cada vez que se usa la clave para la autenticación. Si bien esta es la mejor opción desde el punto de vista de la seguridad, ofrece la peor usabilidad. Esto también puede conducir a que se elija una frase de contraseña débil para disminuir la carga de ingresarla repetidamente.

clave ssh con frase de contraseña, con ssh-agent

Agregar lo siguiente a ~/.bash_profile iniciará automáticamente ssh-agent y cargue la(s) clave(s) ssh al iniciar sesión:

if [ -z "$SSH_AUTH_SOCK" ] ; then
  eval `ssh-agent -s`
  ssh-add
fi

Ahora la frase de contraseña debe ingresarse en cada inicio de sesión. Si bien es un poco mejor desde la perspectiva de la usabilidad, esto tiene el inconveniente de que ssh-agent solicita la frase de contraseña independientemente de si la clave se utilizará o no durante la sesión de inicio de sesión. Cada nuevo inicio de sesión también genera un ssh-agent distinto instancia que permanece ejecutándose con las claves agregadas en la memoria incluso después de cerrar la sesión, a menos que se elimine explícitamente.

Para matar ssh_agent al cerrar la sesión, agregue lo siguiente a ~/.bash_logout

if [ -n "$SSH_AUTH_SOCK" ] ; then
  eval `/usr/bin/ssh-agent -k`
fi

o lo siguiente a ~/.bash_profile

trap 'test -n "$SSH_AUTH_SOCK" && eval `/usr/bin/ssh-agent -k`' 0

Creando múltiples ssh-agent las instancias se pueden evitar creando un socket de comunicación persistente con el agente en una ubicación fija en el sistema de archivos, como en la respuesta de Collin Anderson. Sin embargo, esta es una mejora con respecto a la generación de múltiples instancias de agentes, a menos que se elimine explícitamente, la clave descifrada aún permanece en la memoria después de cerrar la sesión.

En los escritorios, los agentes ssh incluidos con el entorno de escritorio, como el agente SSH de Gnome Keyring, pueden ser un mejor enfoque, ya que normalmente se pueden hacer para solicitar la frase de contraseña la primera vez que se usa la clave ssh durante una sesión de inicio de sesión y almacenar la clave privada descifrada en la memoria hasta el final de la sesión.

clave ssh con frase de contraseña, con ssh-ident

ssh-ident es una utilidad que puede administrar ssh-agent en su nombre y cargue las identidades según sea necesario. Agrega claves solo una vez a medida que se necesitan, independientemente de la cantidad de terminales, ssh o sesiones de inicio de sesión que requieran acceso a un ssh-agent . También puede agregar y usar un agente diferente y un conjunto diferente de claves según el host al que se conecte o el directorio desde el que se invoque ssh. Esto permite aislar claves cuando se utiliza el reenvío de agentes con diferentes hosts. También permite usar múltiples cuentas en sitios como GitHub.

Relacionado:Php:imagecropauto — Recorta una imagen automáticamente usando uno de los modos disponibles

Para habilitar ssh-ident , instálelo y agregue el siguiente alias a su ~/bash_profile :

alias ssh='/path/to/ssh-ident'

clave ssh con frase de contraseña, con keychain

keychain es una pequeña utilidad que administra ssh-agent en su nombre y
permite que el ssh-agent para seguir ejecutándose cuando finalice la sesión de inicio de sesión. En inicios de sesión posteriores, keychain se conectará al ssh-agent existente instancia. En la práctica, esto significa que la frase de contraseña debe ingresarse solo durante el primer inicio de sesión después de reiniciar. En inicios de sesión posteriores, la clave sin cifrar del ssh-agent existente se utiliza la instancia. Esto también puede ser útil para permitir la autenticación RSA/DSA sin contraseña en cron trabajos sin claves ssh sin contraseña.

Para habilitar keychain , instálelo y agregue algo como lo siguiente a ~/.bash_profile :

eval `keychain --agents ssh --eval id_rsa`

Desde un punto de vista de seguridad, ssh-ident y keychain son peores que ssh-agent instancias limitadas a la duración de una sesión en particular, pero ofrecen un alto nivel de conveniencia. Para mejorar la seguridad de keychain , algunas personas agregan --clear opción a su ~/.bash_profile invocación de llavero. Al hacer esto, las frases de contraseña deben volver a ingresarse al iniciar sesión como se indicó anteriormente, pero cron los trabajos seguirán teniendo acceso a las claves sin cifrar después de que el usuario cierre la sesión. El keychain La página wiki tiene más información y ejemplos.

clave ssh sin contraseña

Desde el punto de vista de la seguridad, esta es la peor opción ya que la clave privada está completamente desprotegida en caso de que esté expuesta. Esta es, sin embargo, la única forma de asegurarse de que no sea necesario volver a ingresar la frase de contraseña después de reiniciar.

clave ssh con frase de contraseña, con ssh-agent , pasar frase de contraseña a ssh-add del guión

Si bien puede parecer una idea sencilla pasar la frase de contraseña a ssh-add de un guión, p. echo "passphrase\n" | ssh-add , esto no es tan sencillo como parece como ssh-add no lee la frase de contraseña de stdin , pero abre /dev/tty directamente para leer.

Esto se puede solucionar con expect , una herramienta para automatizar aplicaciones interactivas. A continuación se muestra un ejemplo de una secuencia de comandos que agrega una clave ssh utilizando una frase de contraseña almacenada en la secuencia de comandos:

#!/usr/bin/expect -f
spawn ssh-add /home/user/.ssh/id_rsa
expect "Enter passphrase for /home/user/.ssh/id_rsa:"
send "passphrase\n";
expect "Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)"
interact

Tenga en cuenta que, dado que la frase de contraseña se almacena en texto sin formato en el script, desde una perspectiva de seguridad, esto no es mucho mejor que tener una clave ssh sin contraseña. Si se va a utilizar este enfoque, es importante asegurarse de que expect El script que contiene la frase de contraseña tiene los permisos adecuados establecidos, lo que lo hace legible, escribible y ejecutable solo por el propietario de la clave.


Linux
  1. Cómo configurar el inicio de sesión SSH sin contraseña

  2. ¿Cómo ejecutar un programa específico como root sin una solicitud de contraseña?

  3. Ssh:¿necesito un Tty para ejecutar Sudo si puedo Sudo sin contraseña?

  4. MySQLdump sin contraseña en cronjob

  5. Cómo configurar Rsync con SSH en UNIX/Linux (rsync sin contraseña)

Cómo ejecutar el comando Sudo sin contraseña

Cómo ejecutar comandos particulares sin contraseña Sudo en Linux

Cómo ejecutar comandos Sudo sin contraseña

Cómo ejecutar comandos sudo sin contraseña

Cómo copiar archivos de forma remota a través de SSH sin ingresar una contraseña

Cómo ejecutar remotamente el comando ssh un comando sudo sin contraseña