Intenté crear un usuario con contraseña a través de ssh (con permiso de root) como este:
ssh [email protected] useradd -p $(openssl passwd -1 1234) newuser
Al hacerlo, pude crear con éxito una cuenta llamada newuser
, pero no pude iniciar sesión con la contraseña esperada (que es 1234
)
No hay diferencia si agrego comillas dobles:
ssh [email protected] "useradd -p $(openssl passwd -1 1234) newuser"
Y luego me preguntaba si puedo generar una contraseña hash y guardarla como una variable local, pero aún sin suerte.
password=$(openssl passwd -1 1234)
ssh [email protected] "useradd -p $password newuser"
¿Hay algo que extraño? ¡Gracias por adelantado!
command-line
ssh
password
users
amigcamel
fuente
fuente
Respuestas:
Este es un problema clásico de citas.
Problema: sin comillas ni comillas dobles, la sustitución del comando (
$()
) y la expansión variable (las$
s en la contraseña hash devuelta poropenssl
se tratan como indicador variable) se realizan en el entorno local, no en el shell remoto.Solución: utilice comillas simples alrededor del
useradd
comando utilizadossh
en el shell local para evitar la sustitución del comando y la expansión variable en el entorno local, permita que las expansiones se realicen en el shell remoto no interactivo y sin inicio de sesión:Tenga en cuenta las citas.
Temas de seguridad:
El
root
inicio de sesión SSH debe estar deshabilitado, si debe tenerlo habilitado, solo se debe permitir la autenticación basada en clavesMD5 ya está roto y, sin sal, está sujeto a un simple ataque de mesa Rainbow (ni siquiera necesita un ataque de fuerza bruta / diccionario);
openssl passwd
aunque genera una sal al azar. De todos modos, deberías considerar usar SHA-2 con salLas contraseñas pasadas como argumentos a los comandos pueden ser visibles para otros procesos en el sistema (remoto); esto depende de cómo
procfs
esté montado (mirahidepid
), y si el comando se está reescribiendo (en este caso, presumiblemente no)fuente
crypt(3)
Linux y marcado con el$1$
identificador no es el mismo que el algoritmo de hash MD5 simple, de la misma manera que los hash de contraseña$5$
y SHA-256 y SHA-512 tampoco . El método basado en MD5 tiene un número fijo de iteraciones, que es el mayor problema con él.$6$
Como señaló @heemayl, el algoritmo de hash de contraseña MD5 está obsoleto, y los sistemas actuales tienen los hash de contraseña más nuevos basados en SHA-2, que tienen un factor de trabajo personalizable. Pero la herramienta de línea de comandos OpenSSL no parece admitirlos.
La
chpasswd
utilidad , sin embargo, se permitirá cambiar la contraseña de un usuario en función de la configuración del sistema.Esto debería permitirle crear el nuevo usuario y cambiar su contraseña en el extremo remoto.
chpasswd
toma el nombre de usuario y la contraseña de stdin, no la línea de comando. Esto es realmente una ventaja ya que los argumentos de la línea de comando son visibles para todos los demás procesos en el sistema, por lo que si se ejecutaopenssl passwd
en el control remoto, la contraseña será momentáneamente visible para todos los procesos en el sistema.No estoy seguro de si hay una utilidad de línea de comandos lista para generar hashes de contraseñas conocida por la
crypt(3)
función del sistema . Perl tiene lacrypt
función incorporada, pero aún sería necesario generar una sal adecuada.fuente