agregando contraseña a .ssh / config

24

Estoy usando ubuntu 12.04. Estoy usando ssh para conectarme a muchos servidores diariamente, así que puse sus parámetros en el archivo .ssh / config ; Me gusta esto :

Host server1
User tux
Port 2202
HostName xxx.x.xx.x

¿Hay alguna forma de poner contraseñas en este archivo, para cada conexión? Entonces, cuando el servidor solicita una contraseña, la terminal pone su pase y la envía al servidor, por lo que no necesito escribir la contraseña cada vez. Además, no quiero usar un par de claves pública / privada.

Ajo Augustine
fuente
10
Para eso están los pares de llaves.
Michael Hampton

Respuestas:

31

No, no hay ningún método para especificar o proporcionar en la línea de comandos la contraseña de una manera no interactiva para la autenticación ssh utilizando un mecanismo incorporado openssh. Al menos no uno de lo que sé. Puede codificar su contraseña en el script esperado, pero tampoco es una buena solución.

Definitivamente, querría usar pares de claves para la autenticación sin contraseña, como dijo Michael, al final, la clave privada es prácticamente una gran contraseña en el archivo.

Danila Ladner
fuente
La cuestión es que son los servidores de mis clientes y no permiten iniciar sesión con claves. Estoy escribiendo una secuencia de comandos bash usando esperar para iniciar sesión en todos los servidores donde las credenciales se almacenan y se toman de un dispositivo de almacenamiento USB. Gracias
Ajo Augustine
1
Muy inseguro. Lo único que se sugiere en ese script para bloquear ese archivo con permisos de archivo difíciles.
Danila Ladner
1
Si no permiten claves, no entienden cómo funciona ssh: permitir el inicio de sesión con contraseña lo abre a ataques de diccionario, etc. (aunque sean muy, muy lentos), es casi imposible lograr lo mismo con un par de claves privadas, y si le preocupa que las claves caigan en las manos equivocadas, puede cifrar con contraseña la parte privada de la clave para que necesite dos factores para poder usarla (la contraseña también puede ser recordada en su llavero / por su agente ssh )
Alex Berry
Educar a sus clientes. Explíqueles que es mejor deshabilitar la autenticación de contraseña y solo permitir claves que al revés.
Nikita Kipriyanov
20

Para evitar la cadena de comentarios: Sí, esto es inseguro (ni siquiera posiblemente inseguro). Recomiendo encarecidamente que solo lo haga en una situación de laboratorio en una red aislada o en una situación similar que no implique servidores de producción o un servidor de producción potencial sin un reinicio / formato completo.

Quería configurar esto, ya que no creo que mi conmutador 2950 admita claves privadas / públicas y espero en algún momento obtener ese conocimiento, pero todavía no estoy allí.

Usando un alias y sshpass esto se puede lograr.

  1. Instalar sshpass
  2. Modifique su archivo .ssh / config para incluir el nombre de usuario como se indica en la pregunta
  3. Agregue un alias a su terminal (usé .bashrc y lo recomendaría en contra de la configuración global)
  4. Use alias para iniciar sesión en el objetivo

Mi alias de ejemplo es:

alias ssc='sshpass -pcisco ssh'

Donde "cisco" es la contraseña. Tenga en cuenta que no hay espacio entre -p y la contraseña.

El uso es (haciendo referencia a la pregunta):

ssc server1

Nota: Esto responde la pregunta en el título solo para aquellos que usan motores de búsqueda. Si está utilizando servidores como el ejemplo de la pregunta, se deben utilizar pares de claves privadas / públicas y no esta respuesta

Oveja oscura
fuente
La única solución posible, cuando realmente no puede trabajar con claves por cualquier razón.
sjas
¡Trabajos! Increíble.
Rahul
Sugeriría reemplazar el alias por un script de shell completo; eso le daría la oportunidad de seleccionar dinámicamente qué archivo de contraseña usar según el parámetro del host.
7heo.tk
Muy bien se puede poner un espacio entre -p y la contraseña, como suele ser el caso con los programas cli ...
masterxilo
10

Sí, como se mencionó anteriormente, no hay forma de guardar la contraseña simplemente. Recomendaría usar la clave ssh para la autorización.

primero, genera tu clave:

ssh-keygen

Luego copie la clave en sus servidores / escritorios:

ssh-copy-id -i .ssh/id_rsa.pub user@ip-address:

Eso es todo. Nunca más se le pedirá la contraseña.

También recomiendo eliminar la autorización de contraseña en general, pero eso depende de usted.

Str82DHeaD
fuente
1
Gracias por la referencia a ssh-copy-id! Solía ​​usar algunos artilugios, sshpass -p $PASSWORD ssh $USERNAME@$HOST "echo `cat ~/.ssh/id_rsa` >> /home/$USERNAME/.ssh/authorized_keys"pero este programa es más limpio y deja en claro la intención.
masterxilo
3

No hay forma de hacer esto con ssh, es tan inseguro como puede ser.

Como Danila mencionó, podría usar guiones de espera, pero no me molestaría.

Me pregunto qué estás tratando de lograr. ¿Quieres saltar de un servidor a otro? En este caso, desea configurar y usar ssh-agent en su estación de trabajo y habilitar el reenvío de agente en los hosts de destino; de esta forma, el intercambio de credenciales se enrutará a su agente local sin tener que copiar su clave privada.

Remolino
fuente
VisualStudio tiene el concepto de tokens de acceso personal que son como contraseñas específicas de aplicaciones donde esta característica sería útil.
Spuder
1

Yo uso este script del ~/.local/bindirectorio

#!/usr/bin/bash

ORIG_SSH=/usr/bin/ssh
HOST=$1

SSHPASS=$(grep -Pzo "Host $HOST"'\s*\n((?!Host).*\n)*#PS\s(\N+)\n' ~/.ssh/config|tail -n 2|head -n 1 | sed 's/#PS //')
if [ -n $SSHPASS ]; then
    export SSHPASS
    sshpass -e $ORIG_SSH $@
else
    $ORIG_SSH $@
fi

Lo que me permite especificar la frase de contraseña como #PS <password>en el .ssh/configarchivo.

Pero, como todo el mundo dice, es mejor utilizar ssh-keyscon ssh-agentcuando es posible

mnach
fuente
0

La forma correcta de manejar esta situación es usar un agente ssh basado en sesión. Aquí es cómo:

$ eval `ssh-agent`
$ ssh-add /home/user/.ssh/your_key
Enter passphrase for /home/user/.ssh/your_key:

La contraseña se mantendrá válida por el resto de la sesión. Solo necesita ejecutar el primer comando una vez, y puede agregar tantas teclas como desee después de eso. Cuando se cierra la sesión, también lo hace el agente, por lo que no hay almacenamiento codificado de una contraseña.

¡Sorprendido de que después de tanto tiempo esta respuesta no estuviera aquí!

pranalli
fuente
La razón por la que no estaba allí es probablemente porque el afiche dijo específicamente que no quiere usar un par de claves pública / privada.
Jenny D dice Restablecer a Monica el
1
Me perdí eso, gracias. Luego agregaré que no usar un par de claves para SSH es una muy, muy mala idea. Es más seguro Y más conveniente ... Instaría al OP a reconsiderar. Usar un par de claves sin frase de contraseña es mucho más seguro que ningún par de claves y una contraseña. Pero, idealmente, uno usaría un par de claves con una frase de contraseña y los pasos que proporcioné si están en una sesión que requiere el almacenamiento de su frase de contraseña.
pranalli
-1

Puede hacer esto de manera más segura utilizando sshpass

  1. Establece tu contraseña sin historial

    export PS = your_password ; history -d $ (history 1)

  2. Establezca el alias de host como se indica arriba en ~ / .ssh / config

  3. Use ssh pass para usar la variable de entorno e inicie sesión en la máquina requerida con un solo comando

sshpass -p $ PS ssh host_alias

Su entorno contiene su contraseña y es arriesgado que cualquier script que se ejecute pueda filtrar esta contraseña si no sabe lo que está ejecutando

ashishWaghmare
fuente
No, eso no es seguro. Y es bastante feo.
7heo.tk
¿No es esa "solución" más larga que el problema? Todos esos pasos adicionales, y aún necesita escribirsshpass -p $PS ...
Dan H