-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript
executable file
·335 lines (287 loc) · 10.5 KB
/
script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
#! /bin/bash
# ----------------------
# Escribe el archivo Log
function EscribirLog {
local FILE="LOG.log";
if [ ! -e FILE ]; then
echo "Fecha y hora | Evento (E) || Entrada (I) || Comando ejecutado (c)" >> FILE;
echo "" >> FILE;
fi;
echo "$(date +%a)" "$(date +%d)" "$(date +%b)" "$(date +%Y)" "$(date +%H)":"$(date +%M)":"$(date +%S)"" | (E) $1 || (I) $2 || (c) $3" >> FILE;
}
# --------
# Opción 1
function AgregarUsuario {
EscribirLog "Opción:Agregar Usuario" "1" "AgregarUsuario()"
echo " Complete el formulario:";
read -p " Nombre para loguear: " LOGIN_NAME;
ID_USER="$(sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK id -u $LOGIN_NAME)";
if [[ ! $ID_USER -le 1 ]];
then
echo " Error: No se puede usar este nombre de usuario, porque ya existe.";
return 0;
fi
COMMAND="useradd";
read -p " Texto comentario: " COMENTARIO;
read -p " UID: " UID_NUMBER;
read -p " GID principal: " GID_PRINCIPAL;
read -p " GID adicionales: " GID_ADICIONALES;
if [ -z $GID_ADICIONALES ];
then
EscribirLog "Opción:Agregar Usuario > Agregado:$LOGIN_NAME" "none" "useradd -c $COMENTARIO -u $UID_NUMBER -g $GID_PRINCIPAL $LOGIN_NAME;";
sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK useradd -c \"$COMENTARIO\" -u $UID_NUMBER -g $GID_PRINCIPAL $LOGIN_NAME;
else
EscribirLog "Opción:Agregar Usuario > Agregado:$LOGIN_NAME" "none" "useradd -c $COMENTARIO -u $UID_NUMBER -g $GID_PRINCIPAL -G $GID_ADICIONALES $LOGIN_NAME;";
sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK useradd -c \"$COMENTARIO\" -u $UID_NUMBER -g $GID_PRINCIPAL -G $GID_ADICIONALES $LOGIN_NAME;
fi
echo;
ID_USER="$(sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK id -u $LOGIN_NAME)";
if [ $ID_USER -eq $UID_NUMBER ];
then
echo " Usuario $LOGIN_NAME creado correctamente."
else
EscribirLog "Opción:Agregar Usuario > No se pudo agregar" "none" "none";
echo " No se pudo crear el usuario"
fi
echo
}
# --------
# Opción 2
function ModificarUsuario {
EscribirLog "Opción:Modificar Usuario" "2" "ModificarUsuario()"
read -p " Usuario a modificar: " USER;
echo;
ID_USER="$(sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK id -u $USER)";
if [ $ID_USER -gt 1 ];
then
EscribirLog "Opción:Modificar Usuario > Usuario escogido: $USER" "$USER" "none"
echo -e " $BOLD Campos posibles para modificar: $NOTBOLD";
echo;
echo " [1] Nombre para loguear"
echo " [2] Texto comentario"
echo " [3] UID"
echo " [4] GID principal"
echo " [5] GID adicionales"
echo " [6] Shell"
echo " [7] Directorio"
echo;
read -p " Ingrese una opción: " OPCION
echo;
case $OPCION in
1)
EscribirLog "Opción:Modificar Usuario > Modificar: Nombre para loguear" "1" "none"
read -p " Nuevo nombre para loguear: " LOGIN_NAME;
sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK usermod -l $LOGIN_NAME $USER;
EscribirLog "Opción:Modificar Usuario > Se modificó el nombre de usuario de $USER a $LOGIN_NAME" "$LOGIN_NAME" "usermod -l $LOGIN_NAME $USER;";;
2)
EscribirLog "Opción:Modificar Usuario > Campo:Comentario" "2" "none"
COMENTARIO_ANTERIOR="$(sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK getent passwd $USER | cut -d: -f5)";
read -p " Nuevo texto comentario: " COMENTARIO;
sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK usermod -c \"$COMENTARIO\" $USER;
EscribirLog "Opción:Modificar Usuario > Campo:Comentario > De $COMENTARIO_ANTERIOR a $COMENTARIO" "$COMENTARIO" "usermod -c $COMENTARIO $USER;;";;
3)
EscribirLog "Opción:Modificar Usuario > Campo:Número UID" "3" "none"
UID_ANTERIOR="$(getent passwd $USER | cut -d: -f3)";
read -p " Nuevo UID: " UID_NUMBER;
sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK usermod -u $UID_NUMBER $USER;
EscribirLog "Opción:Modificar Usuario > Campo:Número UID > De $UID_ANTERIOR a $UID_NUMBER" "$UID_NUMBER" "usermod -u $UID_NUMBER $USER;";;
4)
EscribirLog "Opción:Modificar Usuario > Campo:GID principal" "4" "none"
GID_ANTERIOR="$(getent passwd $USER | cut -d: -f4)";
read -p " Nuevo GID principal: " GID_PRINCIPAL;
sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK usermod -g $GID_PRINCIPAL $USER;
EscribirLog "Opción:Modificar Usuario > Campo:GID principal > De $GID_ANTERIOR a $GID_PRINCIPAL" "$GID_PRINCIPAL" "usermod -g $GID_PRINCIPAL $USER;";;
5)
EscribirLog "Opción:Modificar Usuario > Campo:GID adicional(es)" "5" "none"
read -p " Nuevo GID adicionales: " GID_ADICIONALES;
sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK usermod -G $GID_ADICIONALES $USER;
EscribirLog "Opción:Modificar Usuario > Campo:GID adicional(es) > A $GID_ADICIONALES" "$GID_ADICIONALES" "usermod -G $GID_ADICIONALES $USER;";;
6)
EscribirLog "Opción:Modificar Usuario > Campo:Shell" "6" "none"
SHELL_ANTERIOR="$(getent passwd $USER | cut -d: -f7)";
read -p " Nuevo Shell: " SHELL;
sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK usermod -s $SHELL $USER;
EscribirLog "Opción:Modificar Usuario > Campo:Shell > De $SHELL_ANTERIOR a $SHELL" "$SHELL" "usermod -u $SHELL $USER;";;
7)
EscribirLog "Opción:Modificar Usuario > Campo:Directorio" "7" "none"
DIRECTORIO_ANTERIOR="$(sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK getent passwd $USER | cut -d: -f6)";
read -p " Nuevo directorio: " DIRECTORIO;
if [ -d $DIRECTORIO ];
then
echo " No se puede usar este directorio, porque ya existe.";
else
DIRECTORIO_ANTERIOR="$(sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK eval echo ~$USER)";
sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK rm -r $DIRECTORIO_ANTERIOR;
sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK usermod -d $DIRECTORIO $USER;
sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK mkdir $DIRECTORIO;
sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK chown $USER $DIRECTORIO;
echo " Directorio creado correctamente.";
EscribirLog "Opción:Modificar Usuario > Campo:Directorio > De $DIRECTORIO_ANTERIOR a $DIRECTORIO" "$DIRECTORIO" "usermod -u $DIRECTORIO $USER;";
fi;;
*)
EscribirLog "Opción:Modificar Usuario > Opción inválida" "?" "none"
echo " Opción ingresada no valida.";;
esac
echo;
else
EscribirLog "Opción:Modificar Usuario > No se encontró el usuario: $USER" "$USER" "none"
echo " No se encontró el usuario";
fi
echo;
}
# --------
# Opción 3
function BorrarUsuario {
EscribirLog "Opción:Borrar Usuario" "$USER" "none"
read -p " Nombre de usuario: " USER;
echo;
ID_USER="$(sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK id -u $USER)";
if [ $ID_USER -gt 1 ];
then
sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK deluser --remove-home $USER;
EscribirLog "Opción:Borrar Usuario > Se borró $USER" "$USER" "deluser --remove-home $USER;";
echo;
echo " Usuario $USER borrado";
else
EscribirLog "Opción:Borrar Usuario > No se encontró el usuario $USER" "$USER" "none";
echo " No se encontró el usuario";
fi
}
# --------
# Opción 4
function EstablecerContrasena {
EscribirLog "Opción:Establecer Contraseña" "none" "none";
read -p " Nombre de usuario: " USER;
echo;
ID_USER="$(sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK id -u $USER)";
if [ $ID_USER -gt 1 ];
then
sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK passwd $USER;
EscribirLog "Opción:Establecer Contraseña > Se estableció la contraseña para $USER" "none" "passwd $USER;";
else
echo " No se encontró el usuario";
EscribirLog "Opción:Establecer Contraseña > No se encontró el usuario $USER" "none" "none";
fi
echo;
}
# --------
# Opción 5
function CrearGrupo {
EscribirLog "Opción:Crear grupo" "none" "none";
echo " Complete el formulario:";
read -p " Nombre del grupo: " NAME;
if sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK grep -q $NAME /etc/group ;
then
EscribirLog "Opción:Crear grupo > No se creó, porque ya existía" "$NAME" "grep -q $NAME /etc/group";
echo " Ya existe el grupo"
return 0;
fi;
read -p " GID (opcional): " GID_NUMBER;
if [ -z $GID_NUMBER ];
then
sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK groupadd $NAME;
EscribirLog "Opción:Crear grupo > Se creó $NAME" "$NAME" "groupadd $NAME;";
else
sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK groupadd $NAME -g $GID_NUMBER;
EscribirLog "Opción:Crear grupo > Se creó $NAME" "$NAME" "groupadd $NAME -g $GID_NUMBER;";
fi
echo;
echo " Grupo $NAME creado correctamente";
}
# --------
# Opción 6
function BorrarGrupo {
EscribirLog "Opción:Borrar grupo" "none" "none";
read -p " Nombre del grupo: " NAME;
if sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK grep -q $NAME /etc/group ;
then
sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK groupdel $NAME;
echo " Grupo $NAME borrado correctamente";
EscribirLog "Opción:Borrar grupo > Se borró $NAME" "$NAME" "groupdel $NAME;";
else
echo " No existe el grupo $NAME";
EscribirLog "Opción:Borrar grupo > No se borró, porque no existe $NAME" "$NAME" "none";
fi;
}
# ---------------
# Opción inválida
function OpcionInvalida {
echo " Opción ingresada no valida, intentelo de nuevo";
EscribirLog "Se digitó una opción no valida" "none" "none";
}
# ---------------- #
# Menú de opciones #
function MostrarMenu {
echo -e $BOLD;
echo " Menú de opciones"
echo -e $NOTBOLD;
echo " [1] Crear usuario"
echo " [2] Modificar usuario"
echo " [3] Borrar usuario"
echo " [4] Establecer contraseña a usuario"
echo " [5] Crear grupo"
echo " [6] Borrar grupo"
echo " [7] Salir"
echo;
read -p " Ingrese una opción: " OPCION
echo;
case $OPCION in
1)
AgregarUsuario;;
2)
ModificarUsuario;;
3)
BorrarUsuario;;
4)
EstablecerContrasena;;
5)
CrearGrupo;;
6)
BorrarGrupo;;
7)
SALIR=1;;
*)
OpcionInvalida;;
esac
echo
}
clear;
# Variables de colores
WHITE="\033[1;35m";
BOLD="\e[1m";
NOTBOLD="\e[21m";
RESET="\e[0m";
BLINK="\e[5m";
# Inicio de la ejecución en pantalla
echo " De la máquina remota:";
SALIR=0;
EscribirLog "Se inició el programa" "None" "None"
while [ $SALIR -eq 0 ]
do
read -p " Usuario: " USER_WORK;
read -p " IP: " IP_WORK;
# USER_WORK=root;
# IP_WORK=192.168.100.4;
echo -n " Password: " ;
read -s PASS_WORK;
echo;
TESTING="$(sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK id -u root)";
if [[ ! -z $TESTING ]]; then
echo " Conexión establecida";
EscribirLog "Conexión establecida a la máquina remota" "None" "sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK id -u root"
SALIR=1;
else
echo " Conexión NO establecida ($TESTING), intentelo de nuevo.";
EscribirLog "No se pudo conectar a la máquina remota" "None" "sshpass -p $PASS_WORK ssh $USER_WORK@$IP_WORK id -u root"
echo;
fi
done;
SALIR=0;
while [ $SALIR -eq 0 ]
do
MostrarMenu;
done;
echo " Programa cerrado.";
echo;
EscribirLog "Se cerró el programa" "None" "None"
# última línea de código