#!/bin/bash # Autoriza el acceso SSH de una cuenta de cPanel # Uso: ./autorizar_ssh.sh usuario USER="$1" SSHD_CONFIG="/etc/ssh/sshd_config" # Tiene que ejecutarse como root if [[ $EUID -ne 0 ]]; then echo "ERROR: Ejecutar como root." exit 1 fi if [[ -z "$USER" ]]; then echo "Uso: $0 USUARIO" exit 1 fi echo echo "========================================" echo " Autorizando usuario SSH: $USER" echo "========================================" echo # Primero vemos si la cuenta existe echo "- Verificando si el usuario existe..." if ! id "$USER" &>/dev/null; then echo " ERROR - El usuario '$USER' no existe." exit 1 fi echo " OK - Usuario encontrado." echo # Vemos qué shell tiene actualmente echo "- Verificando acceso SSH en WHM..." SHELL_ACTUAL=$(getent passwd "$USER" | cut -d: -f7) if [[ "$SHELL_ACTUAL" == "/bin/bash" ]]; then echo " OK - Ya tiene Normal Shell." else echo " No tiene Normal Shell. Activando..." RESULT=$(whmapi1 modifyacct user="$USER" HASSHELL=1 2>&1) if echo "$RESULT" | grep -qE 'result:[[:space:]]*1'; then echo " OK - Normal Shell activada." else echo " ERROR - No se pudo activar Normal Shell." echo "$RESULT" exit 1 fi fi echo # Ahora vemos si ya está autorizado en sshd_config echo "- Verificando AllowUsers en sshd_config..." if awk ' /^[[:space:]]*AllowUsers[[:space:]]+/ { for (i=2; i<=NF; i++) print $i } ' "$SSHD_CONFIG" | grep -Fxq "$USER"; then echo " OK - El usuario ya está agregado." else echo " No está agregado. Agregando..." # Backup antes de modificar sshd_config BACKUP="${SSHD_CONFIG}.bak-$(date +%F-%H%M%S)" cp -a "$SSHD_CONFIG" "$BACKUP" echo "AllowUsers $USER" >> "$SSHD_CONFIG" echo " OK - AllowUsers $USER" # Chequeamos antes de recargar SSH if /usr/sbin/sshd -t; then systemctl reload sshd 2>/dev/null || systemctl reload ssh 2>/dev/null if [[ $? -ne 0 ]]; then echo " ERROR - No se pudo recargar SSH." exit 1 fi else echo " ERROR - sshd_config quedó con un error." echo " Volviendo al backup..." cp -a "$BACKUP" "$SSHD_CONFIG" exit 1 fi fi # Chequeo final SHELL_FINAL=$(getent passwd "$USER" | cut -d: -f7) ALLOW_FINAL=$(awk ' /^[[:space:]]*AllowUsers[[:space:]]+/ { for (i=2; i<=NF; i++) print $i } ' "$SSHD_CONFIG" | grep -Fx "$USER") echo echo "========================================" echo " Usuario autorizado correctamente" echo "========================================" echo "Usuario : $USER" echo "Shell : $SHELL_FINAL" echo "SSH : Autorizado" echo "========================================"