Las ventajas de un servidor dedicado con el precio de un hosting compartido.
Hosting es lo que hace que su sitio sea visible en la web. Ofrecemos planes rápidos y confiables para cada necesidad, desde una Web básica hasta un sitio de gran potencia.
Las ventajas de un servidor dedicado con el precio de un hosting compartido.
Consiga el rendimiento de un servidor dedicado con la facilidad de un hosting compartido.
Amplié sus Recursos de disco duro, memoria, CPU según tus necesidades en minutos.
Disponga de toda la potencia, privacidad y seguridad que te otorgan nuestros servidores VPS.
Para aquellas empresas que necesitan un servidor físico para sus aplicaciones y sistemas.
Alta disponibilidad, Hardware de vanguardia, Fuentes de alimentación redundantes.
A su disposición sistemas operativos de gran alcance, como Linux o Windows.
Rendimiento de alto nivel gracias al uso de nuestros potentes procesadores Intel Xeon.
Mesa Central +54 11 51685786
Lun a Vie de las 9 a las 19hPublicado en:
La administración remota de servidores es una necesidad constante en toda organización que gestione infraestructura tecnológica. Ya sea un entorno de desarrollo, pruebas o producción, resulta imprescindible contar con mecanismos que permitan ejecutar operaciones en servidores remotos de forma eficiente, segura y confiable. En este contexto, el protocolo SSH (Secure Shell) se ha convertido en el pilar de la administración de sistemas a través de terminal, dado que proporciona una vía cifrada para el acceso remoto, la ejecución de comandos, la transferencia de archivos y otras funciones críticas.
SSH es utilizado por desarrolladores, administradores de sistemas, personal de soporte, ingenieros DevOps y operadores de infraestructura para múltiples propósitos: gestionar instancias en la nube, mantener servidores físicos o virtuales, automatizar procesos con scripts, monitorear recursos, configurar servicios, entre otros. Comprender el funcionamiento de SSH, dominar su configuración y aplicar buenas prácticas de seguridad es esencial en cualquier entorno técnico actual.
SSH es un protocolo de comunicación segura que opera en el nivel de aplicación y se ejecuta sobre una capa de transporte cifrada, típicamente TCP. Fue diseñado como reemplazo directo de protocolos inseguros como Telnet, FTP y rsh, los cuales transmitían contraseñas y datos en texto plano, exponiendo la infraestructura a riesgos severos.
SSH se diferencia porque ofrece:
Autenticación segura de usuarios, ya sea mediante contraseña o claves criptográficas.
Cifrado simétrico de la sesión para proteger la confidencialidad.
Integridad de los datos mediante algoritmos hash.
Ejecución remota de comandos y shell interactiva.
Reenvío de puertos locales y remotos (tunneling).
Capacidad de montar sistemas de archivos remotos vía SFTP o SCP.
Capacidad de encapsular otros protocolos para reforzar su seguridad.
Una sesión SSH inicia con un proceso de negociación criptográfica entre cliente y servidor, donde se intercambian claves públicas, se establece un canal cifrado y luego se verifica la identidad del usuario mediante uno de los métodos de autenticación habilitados.
Antes de iniciar cualquier conexión SSH es necesario validar los siguientes aspectos, tanto en el equipo cliente como en el servidor de destino:
El equipo al que se quiere acceder debe tener instalado y en ejecución el servidor SSH. En la mayoría de distribuciones Linux modernas (Ubuntu, Debian, CentOS, AlmaLinux, Fedora, etc.), este servicio se llama sshd
. Puede instalarse con los siguientes comandos:
Debian/Ubuntu:
sudo apt update
sudo apt install openssh-server
RHEL/CentOS/AlmaLinux:
sudo dnf install openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
SSH escucha por defecto en el puerto TCP 22. Si el servidor tiene reglas de firewall activas (como ufw
, firewalld
o iptables
), este puerto debe estar permitido:
sudo ufw allow 22/tcp
O bien, en firewalld
:
sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --reload
El servidor debe contar con una dirección IP válida y accesible desde el cliente, o bien un nombre de dominio correctamente resuelto por DNS. Este dato se utiliza para identificar el destino en el comando de conexión.
Es necesario conocer el nombre de usuario válido en el sistema remoto. Esto puede ser root
o cualquier otro usuario con permisos suficientes. En ambientes profesionales se desactiva el acceso por root y se trabaja con usuarios comunes que luego elevan privilegios mediante sudo
.
SSH es multiplataforma. Todos los sistemas operativos modernos permiten establecer sesiones SSH, aunque con distintas herramientas.
Ambos sistemas operativos cuentan con el comando ssh
integrado en su terminal. El acceso se realiza con:
ssh usuario@direccion_ip
Por ejemplo:
ssh root@192.168.1.50
Si el puerto ha sido modificado:
ssh -p 2222 usuario@dominio.com
Desde Windows 10 en adelante, PowerShell incorpora el cliente SSH por defecto. También existen herramientas como:
PuTTY: cliente SSH gráfico muy utilizado.
MobaXterm: cliente SSH avanzado con múltiples funciones.
Termius: multiplataforma, con sincronización de perfiles y llaves.
VS Code Remote SSH: extensión para desarrollo remoto desde Visual Studio Code.
Para establecer conexión desde PowerShell:
ssh usuario@192.168.1.50
Con PuTTY:
Abre PuTTY.
Especifica la IP o dominio y el puerto.
Selecciona el tipo de conexión como SSH.
Guarda el perfil si se desea.
Haz clic en Open y autentícate.
SSH permite validar la identidad del usuario de forma segura mediante dos mecanismos principales:
Al establecer la conexión, el servidor solicita una contraseña al usuario. Este método es funcional pero poco seguro, ya que:
Es vulnerable a ataques de fuerza bruta.
Requiere ingreso manual, dificultando la automatización.
Si el servidor permite acceso al usuario root con contraseña, el riesgo es mayor.
Se recomienda deshabilitar esta opción una vez configurado el acceso con llaves.
Más segura y escalable. El cliente genera un par de llaves criptográficas (pública y privada). La pública se copia al servidor, y la privada queda almacenada en el cliente. El servidor permite acceso solo si el cliente presenta una clave privada que coincide con alguna clave pública autorizada.
ssh-keygen -t rsa -b 4096 -C "mi_correo@dominio.com"
El sistema generará dos archivos:
~/.ssh/id_rsa
(clave privada)
~/.ssh/id_rsa.pub
(clave pública)
Automáticamente:
ssh-copy-id usuario@servidor
O manualmente:
cat ~/.ssh/id_rsa.pub | ssh usuario@servidor "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Luego, podrás conectarte sin ingresar contraseña (salvo que protejas la clave privada con passphrase, algo muy recomendable).
~/.ssh/config
Permite simplificar conexiones frecuentes:
Host produccion
HostName 198.51.100.10
User devops
Port 2222
IdentityFile ~/.ssh/id_rsa
Con esta configuración puedes conectarte simplemente con:
ssh produccion
También se puede usar para establecer túneles, reenviar claves, restringir comandos y configurar ProxyJump o bastion hosts.
A medida que un servidor se expone a Internet, aumenta el riesgo de intentos de intrusión. Para proteger un servidor SSH es recomendable:
Cambiar el puerto por defecto para evitar bots automatizados.
Deshabilitar el acceso como root: usar PermitRootLogin no
.
Deshabilitar la autenticación por contraseña si se usan llaves.
Usar firewall para limitar el acceso SSH solo desde IPs autorizadas.
Instalar Fail2Ban para detectar intentos fallidos de conexión y bloquear IPs maliciosas.
Auditar los accesos revisando el archivo de logs /var/log/auth.log
o /var/log/secure
.
Rotar periódicamente las claves privadas si se sospecha de filtración.
Evitar llaves sin passphrase o protegerlas con un agente SSH.
SSH es ampliamente utilizado para ejecutar tareas remotas de forma automatizada, lo que permite:
Ejecutar comandos a distancia:
ssh usuario@servidor "uptime && df -h && free -m"
Ejecutar scripts remotos:
ssh usuario@servidor 'bash -s' < script.sh
Transferir archivos con scp
:
scp archivo.txt usuario@servidor:/ruta
Sincronizar directorios con rsync
:
rsync -avz carpeta/ usuario@servidor:/destino
SSH permite crear túneles seguros entre cliente y servidor, lo cual es útil para acceder a servicios restringidos:
ssh -L 3307:localhost:3306 usuario@servidor
ssh -R 8080:localhost:80 usuario@servidor
ssh -D 1080 usuario@servidor
Luego puedes configurar tu navegador para navegar por ese proxy, ocultando tu IP.
Error | Causa probable | Solución |
---|---|---|
Permission denied |
Usuario incorrecto, clave mal configurada, permisos inválidos | Verificar authorized_keys y permisos de .ssh |
Connection refused |
SSH no instalado o puerto incorrecto | Verificar que sshd esté corriendo |
No route to host |
IP inalcanzable, firewall bloquea la conexión | Probar con ping o traceroute |
Host key verification failed |
Clave del servidor cambió | Borrar línea correspondiente en ~/.ssh/known_hosts |
La automatización de tareas remotas sobre SSH parte de tres condiciones básicas que deben cumplirse:
Una vez que el servidor destino tiene configurada una clave pública del cliente en su archivo ~/.ssh/authorized_keys
, es posible ejecutar comandos sin necesidad de ingresar una contraseña manualmente.
Esto permite que scripts automatizados —ya sea desde otro servidor o desde una computadora de administración— puedan conectarse al servidor remoto sin intervención humana.
Debe estar activo y escuchando en un puerto abierto. Si se cambia el puerto por defecto (22) por razones de seguridad, esta información debe estar incluida en los scripts que realizan la conexión.
Toda la lógica de automatización puede residir en scripts de Bash, Python, PHP, Perl o cualquier lenguaje capaz de invocar procesos del sistema. Estos scripts deben diseñarse para manejar errores, validar resultados y registrar sus acciones.
ssh usuario@servidor 'comando'
Ejemplo:
ssh root@192.168.1.100 'df -h'
Este comando retorna el resultado del uso de disco del servidor remoto.
ssh usuario@servidor 'comando1 && comando2 && comando3'
Ejemplo:
ssh root@servidor 'apt update && apt upgrade -y && systemctl restart apache2'
Esto actualiza los paquetes y reinicia Apache en un solo paso.
SALIDA=$(ssh usuario@servidor 'hostname')
echo "El nombre del servidor remoto es: $SALIDA"
Puedes utilizar esta técnica para tomar decisiones en tiempo real en función de lo que devuelve el servidor.
Existen dos formas de ejecutar scripts ubicados en el cliente sobre el servidor remoto:
ssh usuario@servidor 'bash /ruta/script.sh'
Este método requiere que el script haya sido copiado previamente.
ssh usuario@servidor 'bash -s' < script_local.sh
Este comando toma el contenido del archivo local y lo ejecuta como entrada estándar (stdin
) en el servidor.
Este método es ideal para tareas puntuales y evita dejar archivos residuales en el servidor remoto.
Automatizar tareas muchas veces implica subir archivos al servidor, respaldar información remota o sincronizar contenido entre nodos.
scp
:scp archivo.txt usuario@servidor:/ruta/destino/
scp usuario@servidor:/ruta/logs.tar.gz /local/destino/
rsync
:rsync -avz --delete /local/datos/ usuario@servidor:/remoto/datos/
El flag --delete
elimina archivos en el destino que ya no existen en origen, útil para sincronizaciones completas.
Una vez que se tiene acceso sin contraseña, cualquier script puede ser agendado para su ejecución periódica mediante cron
.
crontab -e
0 2 * * * /ruta/miscript.sh >> /var/log/miscript.log 2>&1
Este cron puede invocar SSH directamente si lo que se desea es automatizar procesos en otros servidores:
0 4 * * * ssh usuario@servidor 'sh /ruta/tarea.sh' >> /var/log/tareas_remotas.log 2>&1
Aunque SSH ofrece cifrado y autenticación segura, la automatización sin control puede generar problemas de seguridad. A continuación, algunas recomendaciones para proteger los entornos automatizados:
Nunca utilizar root
si no es necesario. Crear un usuario dedicado para tareas automáticas con acceso restringido y llaves específicas.
authorized_keys
Es posible restringir las acciones que puede ejecutar una llave específica desde el archivo ~/.ssh/authorized_keys
:
command="/scripts/solo_este.sh",no-agent-forwarding,no-pty ssh-rsa AAAAB3...
Esto garantiza que esa llave solo podrá ejecutar ese script.
ssh-agent
para llaves con passphraseSi la clave privada tiene passphrase, ssh-agent
permite almacenarla en memoria y usarla durante la sesión del script:
eval $(ssh-agent)
ssh-add ~/.ssh/id_rsa
Esto es útil cuando se lanzan scripts desde Jenkins, GitLab CI o cronjobs en estaciones locales.
Establecer una política para renovar claves SSH periódicamente, especialmente si se automatizan tareas críticas.
Un script ejecutado desde una máquina de administración puede realizar lo siguiente en 10 servidores distintos cada noche:
Vaciar logs antiguos.
Reiniciar servicios que consumen mucha RAM.
Verificar si existen procesos colgados.
Enviar por correo un informe consolidado de ejecución.
Cada vez que el equipo de desarrollo sube cambios al repositorio, se ejecuta un script que:
Valida los cambios en staging.
Si los tests pasan, hace un rsync
al servidor de producción.
Reinicia el servicio de PHP-FPM para aplicar cambios.
Un cronjob en un servidor remoto:
Comprime la base de datos MySQL.
La sube a otro servidor mediante scp
.
Elimina respaldos antiguos con más de 7 días.
Aunque SSH es el estándar, existen otras herramientas que lo utilizan o lo extienden:
Permite orquestar tareas en múltiples servidores simultáneamente, usando SSH como medio de transporte. Se puede definir una inventory
con IPs y usuarios, y luego aplicar “playbooks” YAML que ejecutan acciones idempotentes.
Ideal para despliegue automatizado. Puedes configurar hooks post-push que ejecuten acciones vía SSH una vez se actualiza un repositorio.
Reinicia automáticamente conexiones SSH caídas, útil para túneles persistentes entre servidores.