20-sep: [scripts] Autologon - scripts verificacion/correccion + doc actualizada

This commit is contained in:
juanminsanz
2026-09-20 22:24:10 +02:00
parent ac876f59c6
commit a0f99b897d
4 changed files with 249 additions and 14 deletions

View File

@@ -74,24 +74,80 @@ Para el caso de uso real (controlar el PC desde Telegram), lo que necesitas es:
Este caso de uso **NO requiere autologon de Windows**, solo conexión RDP automática. Este caso de uso **NO requiere autologon de Windows**, solo conexión RDP automática.
## Recomendación final ## Recomendación final ACTUALIZADA (20-sep-2026)
**Para el sobremesa (PC de trabajo):** **El usuario NECESITA autologon** para el encendido remoto automático desde Telegram (WoL → arranque → login → escritorio listo → watchers corriendo).
- ❌ **NO usar autologon** (datos de empresa, sensible)
- ✅ **Usar control Telegram** solo para encender/apagar
- ✅ **Login manual** al llegar al despacho
- ✅ **RDP desde portátil** cuando estés fuera (con credenciales guardadas)
**Para el portátil (si fuera necesario):** **La solución correcta es CORREGIR el autologon, NO deshabilitarlo.**
- Evaluar caso por caso
- Considerar PIN en lugar de contraseña completa
- Configurar timeout de bloqueo corto
## Script de verificación ### Flujo de corrección (ejecutar en orden)
#### 1. Verificar configuración actual
```powershell ```powershell
# Verificar estado actual de autologon # Como Administrador
.\INFRAESTRUCTURA\scripts\check_autologon_status.ps1 cd C:\Users\juanm\Documents\Github\INFRAESTRUCTURA\scripts
.\check_autologon_status.ps1
``` ```
(Pendiente de crear) Esto muestra:
- Usuario configurado vs usuario real
- Dominio configurado vs nombre del PC
- Si hay contraseña guardada
- Si el autologon está activo
#### 2. Corregir autologon
```powershell
# Como Administrador
.\fix_autologon.ps1
```
El script:
- Detecta tu usuario actual REAL (`$env:USERNAME`)
- Usa el **nombre del PC** como dominio (`$env:COMPUTERNAME`) ← **CLAVE DEL FIX**
- Pide tu contraseña de forma segura (no se muestra)
- Configura autologon correctamente
- Pide confirmación antes de escribir en el registro
#### 3. Eliminar usuario fantasma (si se creó uno nuevo)
```
Configuración → Cuentas → Familia y otros usuarios → [usuario nuevo] → Quitar
```
#### 4. Probar reinicio local
1. Reinicia el PC manualmente
2. Verifica que entra directo sin pedir contraseña
3. Verifica que es TU usuario (no uno nuevo)
#### 5. Probar encendido remoto completo
1. Apagar PC desde Telegram: `/apagar` → confirmar
2. Esperar 30s a que se apague (watchdog verifica)
3. Encender desde Telegram: `/encender`
4. Esperar ~2 minutos
5. Bot verifica automáticamente si arrancó
6. Conectar por RDP desde portátil → debe entrar directo
### Scripts disponibles
| Script | Función |
|--------|---------|
| `check_autologon_status.ps1` | Ver configuración actual (no modifica nada) |
| `fix_autologon.ps1` | Corregir autologon para el usuario actual |
| `disable_autologon.ps1` | Deshabilitar autologon (reversa rápida) |
### Seguridad
**Riesgos de autologon:**
- Contraseña almacenada en texto plano en el registro
- Cualquiera con acceso físico entra al escritorio
**Mitigaciones recomendadas:**
- Usar **PIN corto** en lugar de contraseña completa
- Configurar **bloqueo automático tras 5-10 minutos** de inactividad
- Activar **BitLocker** en el disco (si no lo está)
- NO dejar el PC físicamente accesible a terceros
**Para el caso de uso actual (sobremesa en despacho privado):**
- ✅ Autologon ACEPTABLE (despacho privado, necesario para inicio remoto)
- ✅ Bloqueo automático tras inactividad
- ✅ BitLocker si hay datos sensibles
- ✅ RDP con credenciales guardadas desde portátil

View File

@@ -0,0 +1,69 @@
# Script para verificar la configuración actual de autologon
# NO modifica nada, solo muestra información
$winlogonPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
Write-Host "`n=== CONFIGURACION ACTUAL DE AUTOLOGON ===" -ForegroundColor Cyan
# Leer configuración del registro
try {
$autologon = Get-ItemProperty -Path $winlogonPath -Name "AutoAdminLogon" -ErrorAction SilentlyContinue
$username = Get-ItemProperty -Path $winlogonPath -Name "DefaultUserName" -ErrorAction SilentlyContinue
$domain = Get-ItemProperty -Path $winlogonPath -Name "DefaultDomainName" -ErrorAction SilentlyContinue
$hasPassword = Get-ItemProperty -Path $winlogonPath -Name "DefaultPassword" -ErrorAction SilentlyContinue
Write-Host "`nREGISTRO DE WINDOWS:"
Write-Host " AutoAdminLogon: $($autologon.AutoAdminLogon)" -ForegroundColor $(if ($autologon.AutoAdminLogon -eq "1") { "Green" } else { "Yellow" })
Write-Host " DefaultUserName: $($username.DefaultUserName)" -ForegroundColor $(if ($username.DefaultUserName) { "White" } else { "Red" })
Write-Host " DefaultDomainName: $($domain.DefaultDomainName)" -ForegroundColor $(if ($domain.DefaultDomainName) { "White" } else { "Red" })
Write-Host " DefaultPassword: $(if ($hasPassword.DefaultPassword) { '[CONFIGURADA]' } else { '[NO CONFIGURADA]' })" -ForegroundColor $(if ($hasPassword.DefaultPassword) { "White" } else { "Red" })
Write-Host "`nUSUARIO ACTUAL REAL:"
Write-Host " Usuario: $env:USERNAME" -ForegroundColor Cyan
Write-Host " Dominio/Workgroup: $env:USERDOMAIN" -ForegroundColor Cyan
Write-Host " Nombre del PC: $env:COMPUTERNAME" -ForegroundColor Cyan
Write-Host "`nCOMPARACION:"
# Verificar si coinciden
$usuarioConfigurado = $username.DefaultUserName
$dominioConfigurado = $domain.DefaultDomainName
if ($usuarioConfigurado -eq $env:USERNAME) {
Write-Host " ✓ Usuario coincide" -ForegroundColor Green
} else {
Write-Host " ✗ Usuario NO coincide" -ForegroundColor Red
Write-Host " Configurado: $usuarioConfigurado" -ForegroundColor Gray
Write-Host " Real: $env:USERNAME" -ForegroundColor Gray
}
if ($dominioConfigurado -eq $env:COMPUTERNAME) {
Write-Host " ✓ Dominio correcto (nombre del PC)" -ForegroundColor Green
} elseif ($dominioConfigurado -eq $env:USERDOMAIN) {
Write-Host " ~ Dominio usa USERDOMAIN" -ForegroundColor Yellow
Write-Host " Actual: $dominioConfigurado" -ForegroundColor Gray
Write-Host " Recomendado: $env:COMPUTERNAME" -ForegroundColor Gray
} else {
Write-Host " ✗ Dominio NO coincide" -ForegroundColor Red
Write-Host " Configurado: $dominioConfigurado" -ForegroundColor Gray
Write-Host " Nombre PC: $env:COMPUTERNAME" -ForegroundColor Gray
}
if ($autologon.AutoAdminLogon -eq "1" -and $username.DefaultUserName -and $hasPassword.DefaultPassword) {
Write-Host "`n[RESULTADO] Autologon ACTIVO" -ForegroundColor Green
if ($username.DefaultUserName -ne $env:USERNAME) {
Write-Host "[PROBLEMA] Usuario configurado NO es el actual → puede crear usuario nuevo" -ForegroundColor Red
Write-Host "[SOLUCION] Ejecutar: .\fix_autologon.ps1" -ForegroundColor Yellow
}
} elseif ($autologon.AutoAdminLogon -eq "1") {
Write-Host "`n[RESULTADO] Autologon ACTIVO pero INCOMPLETO (falta usuario o contraseña)" -ForegroundColor Yellow
} else {
Write-Host "`n[RESULTADO] Autologon DESACTIVADO" -ForegroundColor Gray
}
} catch {
Write-Host "[ERROR] No se pudo leer la configuración: $_" -ForegroundColor Red
}
Write-Host "`n========================================`n" -ForegroundColor Cyan

View File

@@ -0,0 +1,33 @@
# Script para DESHABILITAR autologon
# Ejecutar como ADMINISTRADOR
# Verificar que se ejecuta como Admin
$esAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not $esAdmin) {
Write-Host "[ERROR] Este script debe ejecutarse como Administrador." -ForegroundColor Red
exit 1
}
Write-Host "`n=== DESACTIVAR AUTOLOGON ===" -ForegroundColor Cyan
$winlogonPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
try {
# Deshabilitar autologon
Set-ItemProperty -Path $winlogonPath -Name "AutoAdminLogon" -Value "0"
# Eliminar contraseña almacenada (seguridad)
Remove-ItemProperty -Path $winlogonPath -Name "DefaultPassword" -ErrorAction SilentlyContinue
Write-Host "`n[OK] Autologon DESACTIVADO." -ForegroundColor Green
Write-Host "Al reiniciar, Windows pedirá contraseña normalmente." -ForegroundColor White
Write-Host "`nPara reactivar autologon correctamente:" -ForegroundColor Yellow
Write-Host " .\fix_autologon.ps1" -ForegroundColor White
} catch {
Write-Host "`n[ERROR] No se pudo deshabilitar autologon: $_" -ForegroundColor Red
exit 1
}
Write-Host "`n========================================`n" -ForegroundColor Cyan

77
scripts/fix_autologon.ps1 Normal file
View File

@@ -0,0 +1,77 @@
# Script para CORREGIR autologon y que use el usuario ACTUAL
# Ejecutar como ADMINISTRADOR
param(
[Parameter(Mandatory=$false, HelpMessage="Contraseña/PIN de Windows (si no se proporciona, se pide de forma segura)")]
[string]$Password
)
# Verificar que se ejecuta como Admin
$esAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not $esAdmin) {
Write-Host "[ERROR] Este script debe ejecutarse como Administrador." -ForegroundColor Red
Write-Host "Click derecho → 'Ejecutar como administrador'" -ForegroundColor Yellow
exit 1
}
Write-Host "`n=== CONFIGURACION DE AUTOLOGON CORRECTO ===" -ForegroundColor Cyan
# Detectar usuario actual REAL
$username = $env:USERNAME
$computername = $env:COMPUTERNAME
Write-Host "`nUsuario detectado: $computername\$username" -ForegroundColor White
# Pedir contraseña si no se pasó como parámetro
if (-not $Password) {
Write-Host "`nIntroduce tu contraseña/PIN de Windows:" -ForegroundColor Yellow
$securePassword = Read-Host -AsSecureString
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($securePassword)
$Password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
[System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($BSTR)
}
# Mostrar lo que se va a configurar (SIN mostrar la contraseña)
Write-Host "`nSe configurará autologon con:" -ForegroundColor Cyan
Write-Host " AutoAdminLogon: 1" -ForegroundColor White
Write-Host " DefaultUserName: $username" -ForegroundColor White
Write-Host " DefaultDomainName: $computername" -ForegroundColor White
Write-Host " DefaultPassword: [OCULTA]" -ForegroundColor White
Write-Host "`n¿Continuar? (S/N): " -ForegroundColor Yellow -NoNewline
$respuesta = Read-Host
if ($respuesta -ne "S" -and $respuesta -ne "s") {
Write-Host "[CANCELADO] No se realizaron cambios." -ForegroundColor Gray
exit 0
}
# Aplicar configuración
$winlogonPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
try {
Set-ItemProperty -Path $winlogonPath -Name "AutoAdminLogon" -Value "1"
Set-ItemProperty -Path $winlogonPath -Name "DefaultUserName" -Value $username
Set-ItemProperty -Path $winlogonPath -Name "DefaultPassword" -Value $Password
Set-ItemProperty -Path $winlogonPath -Name "DefaultDomainName" -Value $computername # CLAVE: nombre del PC, no USERDOMAIN
Write-Host "`n[OK] Autologon configurado correctamente." -ForegroundColor Green
Write-Host "`nAl reiniciar el PC, Windows entrará automáticamente como:" -ForegroundColor Cyan
Write-Host " $computername\$username" -ForegroundColor White
Write-Host "`nPrueba:" -ForegroundColor Yellow
Write-Host " 1. Reinicia el PC" -ForegroundColor White
Write-Host " 2. Verifica que entra sin pedir contraseña" -ForegroundColor White
Write-Host " 3. Si funciona, prueba encendido remoto desde Telegram" -ForegroundColor White
Write-Host "`nPara verificar la configuración:" -ForegroundColor Yellow
Write-Host " .\check_autologon_status.ps1" -ForegroundColor White
Write-Host "`nPara desactivar autologon:" -ForegroundColor Yellow
Write-Host " .\disable_autologon.ps1" -ForegroundColor White
} catch {
Write-Host "`n[ERROR] No se pudo configurar autologon: $_" -ForegroundColor Red
exit 1
}
Write-Host "`n========================================`n" -ForegroundColor Cyan