Create Cluster User Script

Este script genera todo lo necesario para crear y dejar andando un usuario en el cluster. Luego hay que incluir al usuario en las colas que correspondan del torque

#!/bin/bash  
#
# Script para agregar un usuario en el cluster
 
usage() {
  echo "Usage: `basename $0` -u user -i \"Name Surname, etc\" -g group -e email " >&2
  exit 1
}  
 
 
# Si no pasamos ningún argumento, invocamos función usage:
 
[[ -n "$1" ]] || { usage; }
 
# Procesamos los argumentos de entrada
 
while getopts ":u:i:g:e:" Option
do
  case $Option in
    u) user=$OPTARG ;;
    i) gecos=$OPTARG ;;
    g) group=$OPTARG;;
    e) email=$OPTARG;;
    *) usage;;
  esac
done 
 
 
# Verificamos que le hayamos pasado todos los argumentos requeridos
# Primero verificamos si el usuario existe
 
[[ -n "$user" ]] || { echo "Must supply a username";usage; }
 
if grep "^${user}:" /etc/passwd >/dev/null
then
  echo ERROR: $user existe
  exit 1;
else
  echo Usuario: $user
fi
 
# Ahora verificamos el dato de grupo
[[ -n "$group" ]] || { echo "Must supply a group";usage; }
if grep "^${group}:" /etc/group >/dev/null
then
  echo "Grupo: $group"
else
  echo "ERROR: El grupo $group no existe, debe crearlo primero"
  exit 2;
 fi
 
# algo de información debe haber ingresado por la opción -i
[[ -n "$gecos" ]] || { echo "ERROR: Some GECOS info must be provided";usage; }
echo "GECOS: $gecos"
 
# the user must have an email
[[ -n "$email" ]] || { echo "ERROR: must provide the user\'s email";usage; }
echo "Email: $email"
 
# We should also check that email has proper format!!! (eventually this should be implemented)
 
# OK, if we got here, we have all we need
 
# Primero creamos el usuario:
 
useradd -g $group -d /home/$user -c "$gecos" -s /bin/bash $user
 
if grep "^${user}:" /etc/passwd >/dev/null
then
  echo "Usuario $user creado";
else
  echo "ERROR: algo pasó, el usuario parece no existir"
  exit 3;
fi
 
mkdir /home/$user
chown $user.$group /home/$user
 
 
if test -d /home/$user
then
  # Ahora creamos el .forward para que el usuario reciba las notificaciones del sistema
  cd /home/$user
  echo $email >.forward
  chown $user .forward
  chmod 600 .forward
  echo "Redirigiendo todo su email a $email"
  # Ahora creamos las llaves SSH
  cd /home/$user
  mkdir .ssh
  cd .ssh
  ssh-keygen -t rsa -b 1024 -f id_rsa
  if test -f id_rsa
  then    
    cat id_rsa.pub >>authorized_keys
  fi
  # Ahora juntamos las llaves de los hosts del cluster en known_hosts
  for i in `cat /var/spool/torque/server_priv/nodes|awk '{print $1;}'`
  do
    echo getting key from node $i
    ssh-keyscan -t rsa $i >>/home/$user/.ssh/known_hosts
  done
else
  echo "ERROR: algo pasó que el directorio del usuario no existe"
fi