Cómo guardar los comandos frecuentes de la terminal (snippets SSH)

Empieza por el historial que tu shell ya guarda: sube HISTSIZE, añade marcas de tiempo y busca comandos antiguos con Ctrl-R. Si añades a un comando un comentario como # @health, luego puedes buscar esa etiqueta. Convierte los comandos que usas cada semana en alias o funciones dentro de un archivo que copias a cada servidor. Deja fuera de todo esto las contraseñas y los tokens.

Actualizada el . Los ajustes de bash 5.2, HISTIGNORE, history -d, los alias, las funciones y RemoteCommand se ejecutaron en contenedores Debian 13 con OpenSSH 10.0.

Tu shell ya los guarda

Cada comando que escribes queda en el historial de la shell, pero los valores por defecto son pequeños y el archivo solo se escribe al salir. Dos sesiones a la vez pueden pisarse las líneas. Para bash, añade esto a ~/.bashrc:

HISTSIZE=100000
HISTFILESIZE=100000
HISTCONTROL=ignoreboth
HISTTIMEFORMAT='%F %T '
shopt -s histappend
PROMPT_COMMAND='history -a'
  • HISTSIZE y HISTFILESIZE guardan hasta 100.000 líneas en memoria y en el archivo.
  • ignoreboth omite las líneas repetidas y las que empiezan por un espacio.
  • HISTTIMEFORMAT añade la fecha y la hora a history.
  • histappend e history -a añaden cada comando al archivo en el momento, así una conexión perdida no pierde nada. Si tu PROMPT_COMMAND ya tiene un valor, pon history -a; delante.

Para zsh, la shell por defecto en macOS, pon esto en ~/.zshrc:

HISTFILE=~/.zsh_history
HISTSIZE=100000
SAVEHIST=100000
setopt EXTENDED_HISTORY INC_APPEND_HISTORY HIST_IGNORE_SPACE HIST_IGNORE_DUPS

Haz lo mismo en los servidores que más usas. Por SSH, el historial se guarda en el servidor, para el usuario con el que entraste.

Encontrar un comando otra vez

Pulsa Ctrl-R y escribe cualquier parte del comando. Pulsa Ctrl-R otra vez para coincidencias más antiguas, Intro para ejecutarlo o una flecha para editarlo antes. Para ver una lista:

history | grep journalctl

Con las marcas de tiempo de arriba, la lista muestra cuándo se ejecutó cada comando:

    1  2026-11-06 15:21:40 echo one
    2  2026-11-06 15:21:40 diskfree /tmp
    3  2026-11-06 15:21:40 uptime -p  # @health

La última línea muestra un truco útil. Un comentario después de # no hace nada al ejecutar el comando, pero se queda en el historial. Añade una etiqueta como # @health o # @deploy, y Ctrl-R seguido de @health encuentra todos los comandos con esa etiqueta.

Alias y funciones para los comandos que repites

Un comando que escribes cada semana merece un nombre corto. Un alias es texto fijo. Una función acepta argumentos:

alias logs='journalctl -u nginx --since "1 hour ago" --no-pager'
diskfree() { df -h "${1:-/}" | tail -n 1; }

diskfree solo revisa /, y diskfree /var revisa esa carpeta. Comprueba qué hace un nombre con type logs. Los alias solo funcionan en shells interactivas, así que un script o ssh server logs no los encuentran. Para esos casos usa una función en un archivo que se carga, o un pequeño script en ~/bin.

Un comando guardado por servidor en tu configuración SSH

Para un comando que siempre ejecutas en un servidor, como seguir un log, la configuración SSH puede lanzarlo al entrar. Pon esto en ~/.ssh/config:

Host web1-logs
  HostName web1
  RemoteCommand tail -f /var/log/nginx/error.log
  RequestTTY yes

ssh web1-logs abre el log directamente. RequestTTY yes da una terminal al comando, así funciona Ctrl-C. Esa entrada no admite además un comando en la línea de órdenes: ssh web1-logs uptime falla con Cannot execute command-line and remote command. Anúlalo cuando lo necesites:

ssh -o RemoteCommand=none web1-logs uptime

Tienes más patrones en la guía del archivo ssh config.

Guárdalos en un archivo que puedas llevar contigo

Pon tus alias y funciones en un archivo propio, cárgalo desde la configuración de tu shell y cópialo a los servidores que usas:

mkdir -p ~/.config/shell
$EDITOR ~/.config/shell/commands.sh
echo '[ -f ~/.config/shell/commands.sh ] && . ~/.config/shell/commands.sh' >> ~/.bashrc
ssh web1 'mkdir -p ~/.config/shell' && scp ~/.config/shell/commands.sh web1:.config/shell/

Añade una vez la misma línea echo al ~/.bashrc del servidor. Si guardas el archivo en un repositorio git, tienes su historial y una forma fácil de llevarlo a una máquina nueva. Para enviarlo a muchos servidores a la vez, consulta cómo ejecutar un comando en varios servidores.

Lo que nunca debes guardar

Los archivos de historial son texto plano. Una contraseña escrita en la línea de comandos, como mysql -pS3cret, se queda ahí para cualquiera que pueda leer el archivo. Tres formas de dejar fuera los secretos:

  • Empieza la línea con un espacio. Con ignoreboth en bash o HIST_IGNORE_SPACE en zsh, no se guarda.
  • Omite patrones para siempre con HISTIGNORE en bash:
HISTIGNORE='*PASSWORD*:*TOKEN*'
  • Borra una línea que acabas de escribir. En bash 5 o posterior, esto elimina el comando anterior:
history -d -2

Eso solo corrige el historial en memoria. Si la línea ya llegó al archivo de historial, bórrala también ahí y cambia la contraseña, porque puede que ya se haya copiado a otro sitio. Mejor aún, deja que el programa pida la contraseña, con mysql -p sin nada detrás, o lee los secretos de un archivo con permisos estrictos.

Preguntas

¿Dónde guarda bash el historial de comandos?

En ~/.bash_history, que se escribe al salir de la shell salvo que añadas history -a a PROMPT_COMMAND. zsh usa el archivo de HISTFILE, a menudo ~/.zsh_history.

¿El historial de un servidor incluye mis comandos locales?

No. Cada máquina tiene su propio historial. Los comandos que escribes en una sesión SSH se guardan en el servidor, en el historial del usuario con el que entraste.

¿Cómo evito que se guarde un comando?

Empiézalo con un espacio cuando HISTCONTROL incluye ignorespace en bash, o cuando HIST_IGNORE_SPACE está activo en zsh. HISTIGNORE también puede saltarse patrones como *TOKEN*.

¿Qué diferencia hay entre un alias y una función?

Un alias sustituye la primera palabra de un comando por un texto fijo. Una función es un pequeño programa que acepta argumentos, como una carpeta o el nombre de un servicio.

Fuentes

Más en Configuración y muchos servidores

Todas las guías