52 lines
1.9 KiB
Ruby
Executable File
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."
|