Files
dtic-DIIAA/scripts/candado.rb
T

52 lines
1.9 KiB
Ruby
Executable File

#!/usr/bin/env ruby
# script: candado.rb
# Uso: ruby scripts/candado.rb [minutos]
# Descripción: Genera un token de autorización temporal para que el Agente pueda ejecutar tareas críticas.
# Requiere que el usuario tenga claves SSH cargadas (prueba de identidad).
require 'json'
require 'fileutils'
TOKEN_FILE = File.expand_path('../.agent_token', __dir__)
DEFAULT_DURATION_MINS = 5
# 1. Validación de Identidad (Proof of User Presence)
puts "🔐 Requerimiento de Protocolo: Autorización FRESCA."
puts "🧹 Limpiando identidades previas en el agente SSH para exigir validación..."
system("ssh-add -D > /dev/null 2>&1") # Borra claves cacheadas para forzar el prompt
puts "🔑 Por favor, ingresa tu passphrase para autorizar al Agente:"
# Intentamos cargar las claves interactivamente (ahora sí pedirá pass porque borramos las anteriores)
system("ssh-add")
# Verificamos que la carga haya sido exitosa
system("ssh-add -l > /dev/null 2>&1")
unless $?.success?
puts "❌ ERROR: No se detectaron identidades SSH."
puts " Debes completar el desafío de identidad (passphrase) para continuar."
exit 1
end
# 2. Generación del Token
duration = (ARGV[0] || DEFAULT_DURATION_MINS).to_i
expires_at = Time.now + (duration * 60)
token_data = {
created_at: Time.now.to_s,
expires_at: expires_at.to_s,
duration_mins: duration,
authorized_by: ENV['USER'] || 'unknown',
signature: rand(36**8).to_s(36) # Firma aleatoria simple
}
File.write(TOKEN_FILE, JSON.pretty_generate(token_data))
FileUtils.chmod(0600, TOKEN_FILE) # Solo lectura para el usuario
puts "\n🔓 VACANCIA DE SEGURIDAD ACTIVADA"
puts "--------------------------------"
puts "✅ Agente AUTORIZADO para operaciones críticas."
puts "⏳ Ventana de tiempo: #{duration} minutos."
puts "💀 Expira: #{expires_at.strftime('%H:%M:%S')}"
puts "🔑 Token: #{TOKEN_FILE}"
puts "\n>> Ahora puedes pedirle al Agente que ejecute sus tareas."