Agregue un usuario al sistema * solo si no existe *

47

He estado ejecutando el useradd {user}comando para agregar usuarios a mi sistema, aunque planeo ejecutar esto en un entorno automatizado, y podría terminar ejecutándose nuevamente, aunque el usuario ya exista.

¿Hay alguna manera de que pueda ejecutar esto solo si el usuario aún no existe? El usuario no tiene una carpeta de inicio.

Tarnfeld
fuente
addusergeneralmente se prefiere en sistemas Debian / Ubuntu.
Faheem Mitha
@FaheemMitha En los scripts automatizados, probablemente sea mejor usar los más consistentes useradd.
El chico con el sombrero

Respuestas:

69

id -u somename devuelve un código de salida distinto de cero cuando el usuario no existe.

Puede probarlo simplemente ... ( &>/dev/nullsolo suprime la salida / advertencia normal)

id -u somename &>/dev/null || useradd somename 
Peter.O
fuente
1
De forma portátil: "id -u somename> / dev / null 2> & 1 || useradd somename"
Tristán
13

prueba esto:

useradd {user} || echo "User already exists."

o incluso esto:

useradd {user} || true
sebaszw
fuente
Esto guarda la verificación, ya que falla de forma segura si el usuario ya existe.
CoverosGene 01 de
8

A menos que solo tenga un pequeño puñado de sistemas, está haciendo la pregunta equivocada. La respuesta no es ejecutar useradd en absoluto, sino dejar este trabajo a una solución de gestión de configuración como puppet o chef. Esto permitirá que sus definiciones de usuario se centralicen y evitará que ejecute bucles y use ssh con usuarios root para configurar sus sistemas. Siempre tendrá sistemas en un estado de configuración conocido.

La documentación para la marioneta está disponible en http://docs.puppetlabs.com

Como ejemplo en títere:

user { "bob" : 
  password   => "$1$yv3n066X$Vpb05Ac/fHTicNdT9T5vz1", # generated with `openssl passwd -1`
  ensure     => present,                              # ensure => absent to remove
  managehome => true,
}
Aaron Brown
fuente
44
Marioneta es un gran proyecto, pero no se puede hacer suposiciones acerca de lo que el PO está pidiendo realmente :)
rahmu
1
El OP explicó el objetivo muy claramente: automatizado y puede ejecutarse nuevamente aunque el usuario exista (idempotencia). Estos son los casos de uso exactos para una herramienta de administración de configuración. Cuando alguien no es consciente de que ya existen herramientas para resolver estos problemas, tiende a hacer preguntas que implican resolver un problema muy específico y de enfoque limitado cuando hay un concepto más amplio que comprender.
Aaron Brown
Ya estoy usando Chef.
tarnfeld
1
Chef solo agregará usuarios si el usuario no existe. Eso es lo que es la idempotencia, así que no entiendo la pregunta (hace 1,5 años).
Aaron Brown
4

useradd no volvería a agregar al usuario si ya existe, tiene la intención de asegurarse de que el número de usuario y el inicio de sesión sean únicos. Si planea ejecutar un lote, asegúrese de que los uids que se usan sean únicos; useradd se quejaría por las entradas problemáticas y necesita capturar los errores / stderr para ver qué cuentas de usuario tuvieron problemas para ingresar a los sistemas de cuenta (/ etc / passwd, group, shadow).

Nikhil Mulley
fuente