===== 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.
* Página Web de Keybox: [[https://github.com/skavanagh/KeyBox]]
* Vídeo del uso de Keybox: [[https://www.youtube.com/watch?v=uSodV4EJ5MU]]
**Qué permite hacer Keybox desde su interfaz web.**
* Multiplataforma, escrito en Java, Software libre y mus simple de usar e instalar (descargar y ejecutar).
* Crear llaves (privada y pública) / Usar llaves públicas existentes de usuarios y administrarlas.
* Ejecutar comandos (scripts) en múltiples servidores de forma a la vez.
* Hacer conexiones ssh desde un entorno web.
* HTTPS por defecto y permite utilizar autenticación de doble factor para entrar a la interfaz web.
* Utilizar Keyhost como equipo bastión para el uso de SSH.
* Desplegar claves SSH mediante perfiles de usuarios / hosts en múltiples servidores, inhabilitarlas y habilitarlas.
**Ficheros importantes**.
- Llave SSH pública de Keybox: KeyBox-jetty/jetty/keybox/WEB-INF/classes/keydb/id_rsa.pub
- 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.
* Linea 127: [[https://github.com/skavanagh/KeyBox/blob/5f1f2ab8424759bccb8ee012ff41d32e5acac2a8/src/main/java/com/keybox/manage/util/SS/HUtil.java|Util.java]]
* Linea 69: [[https://github.com/skavanagh/KeyBox/blob/96dc472497308eb12597416ef187ea0634337d84/src/main/java/com/keybox/common/db/DB/InitServlet.java|InitServlet.java]]
**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.