Keybox: administrar llaves SSH en datacenters + ejecución simultanea de comandos

Keybox permite mediante una interfaz web la gestión centralizada de accesos SSH en granjas de servidores. EL acceso SSH se realiza por medio de llaves y basando su administración en perfiles de usuario o hosts.

Los administradores pueden iniciar sesión en Keybox mediante autenticación de dos factores (FreeOTP o Google Authenticator) y acceder a terminales SSH desde la web.

Qué permite hacer Keybox desde su interfaz web.

Ficheros importantes.

  1. Llave SSH pública de Keybox: KeyBox-jetty/jetty/keybox/WEB-INF/classes/keydb/id_rsa.pub
  2. Llave privada + Configuración en ddbb H2: KeyBox-jetty/jetty/keybox/WEB-INF/classes/keydb/keybox.h2.db

Actualizar o migrar Keybox. Solo es necesario conservar los ficheros (Keybox ssh keys + Configuración): /media/keybox/KeyBox-jetty/jetty/keybox/WEB-INF/classes/keydb

NOTA: Keybox genera la clave privada y la guarda en la base de datos la cual se encuentra a su vez cifrada.

Instalar Java 1.8 como dependencia. (Ejemplo de RPM)

rpm -ihv jre-8u45-linux-x64.rpm# java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

Instalación y configuración de Keybox (Simplemente descomprimir, configurar y ejecutar) Descargar Keybox: https://github.com/skavanagh/KeyBox/releases

tar -zxvf keybox-jetty-v2.83_00.tar.gz
cd KeyBox-jetty
./startKeyBox.sh

Navegador web: https://dominio:8443 (Usuario: admin / Contraseña: changeme)

Por defecto, no permite agregar llave públicas ya existentes y solo permite crearlas obligando a utilizar passphrase. Para utilizar llaves públicas existentes se debe adaptar la siguiente opción a falso.

forceUserKeyGeneration=false

Fichero de configuración de Keybox: KeyBox-jetty/jetty/keybox/WEB-INF/classes/KeyBoxConfig.properties

#
# KeyBox - Version: 2.83.00
#
#
#set to true to regenerate and import SSH keys
resetApplicationSSHKey=false
#SSH Key Type 'dsa' or 'rsa'
sshKeyType=rsa
#private ssh key, leave blank to generate key pair
privateKey=
#public ssh key, leave blank to generate key pair
publicKey=
#default passphrase, leave blank for key without passphrase
defaultSSHPassphrase=${randomPassphrase}
#enable audit
enableAudit=false
#keep audit logs for in days
deleteAuditLogAfter=90
#default timeout in minutes for websocket connection (no timeout for <=0)
websocketTimeout=0
#enable SSH agent forwarding
agentForwarding=false
#enable two-factor authentication
enableOTP=true
#enable key management
keyManagementEnabled=true
#set to true to generate keys when added/managed by users and enforce strong
passphrases set to false to allow users to set their own public key
forceUserKeyGeneration=false
#authorized_keys refresh interval in minutes (no refresh for <=0)
authKeysRefreshInterval=120
#Regular expression to enforce password policy
passwordComplexityRegEx=((?=.*\\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*()+=]).{8\,20})
#Password complexity error message
passwordComplexityMsg=Passwords must be 8 to 20 characters\, contain one digit\, one
lowercase\, one uppercase\, and one special character
#specify a external authentication module (ex: ldap-ol, ldap-ad). Edit the jaas.conf
to set connection details
jaasModule=

Los servidores que se quieran tener administrados con Keybox deben tener la clave pública de Keybox en el fichero “authorized_keys” del usuario a administrar. Si no se tiene la llave pública, preguntará por la password y agregará la clave pública al fichero authorized_keys una vez haya accedido al sistema.