Comando SSH: uso de las opciones -l, -p e -i y comprobación de errores de conexión
El comando SSH es el comando del cliente OpenSSH que se conecta a un servidor Linux remoto mediante una conexión cifrada con la forma ssh cuenta@dirección-del-servidor y ejecuta comandos en el servidor al que se conecta. Ejecutamos ssh desde un servidor AlmaLinux 9 hacia un servidor Debian 12 y comprobamos por orden desde la verificación de la clave de host en la primera conexión hasta las opciones -l, -p e -i, la ejecución de comandos remotos y la salida de depuración de -v. Vimos que la forma en que se aplican realmente las opciones se puede comprobar de antemano con ssh -G, sin conectarse.
La salida de abajo es exactamente la que obtuvimos en los dos servidores. La dirección del servidor, la cuenta, el nombre de host, la ruta y la huella de la clave, y los números de versión de OpenSSL y del kernel del servidor que se conecta se han sustituido por valores de ejemplo. El servidor AlmaLinux que se conecta usa la cuenta root y el servidor Debian que recibe la conexión usa una cuenta normal.
1️⃣ Uso básico del comando SSH
Para iniciar sesión en un servidor remoto, escribe después de ssh el nombre de la cuenta y la dirección del servidor unidos con @. Al iniciar sesión, el prompt cambia al del servidor al que te conectaste, y al escribir exit se cierra la conexión y vuelves al servidor original.
ssh user@192.0.2.10Linux server2 6.1.0-53-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.187-1 (2026-09-07) x86_64
Last login: Wed Oct 28 20:27:41 2026 from 198.51.100.7
[user]:~$ whoami
user
[user]:~$ exit
exit
Connection to 192.0.2.10 closed.El servidor Debian al que nos conectamos mostró además al iniciar sesión unas líneas del aviso del servidor (motd) y un aviso de correo; en la salida de arriba solo se quitaron esas líneas.
Si es la primera vez que te conectas a un servidor, antes de iniciar sesión se muestra la huella de la clave de host del servidor y se pregunta si quieres seguir con la conexión. Al escribir yes, la clave de host se guardó en ~/.ssh/known_hosts y después apareció el resultado de whoami.
ssh user@192.0.2.10 whoamiThe authenticity of host '192.0.2.10 (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.
userUna vez guardada en known_hosts, la pregunta no volvió a aparecer al conectarnos al mismo servidor. Si la huella no coincide con el valor que te dio el administrador del servidor, escribe no. Al escribir no, terminó sin conectarse.
ssh user@192.0.2.10The authenticity of host '192.0.2.10 (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? no
Host key verification failed.Al terminar con no, no se creó el archivo known_hosts. Por eso la misma pregunta vuelve a aparecer en la siguiente conexión.
2️⃣ Opciones del comando SSH
Las opciones de ssh se escriben antes del destino de la conexión. Al ejecutar solo ssh, apareció como modo de uso la lista de opciones disponibles.
sshusage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-b bind_address]
[-c cipher_spec] [-D [bind_address:]port] [-E log_file]
[-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file]
[-J destination] [-L address] [-l login_name] [-m mac_spec]
[-O ctl_cmd] [-o option] [-P tag] [-p port] [-R address]
[-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
destination [command [argument ...]]
ssh [-Q query_option]Si pones una opción que no está en el modo de uso, aparece el error [unknown option] junto con el mismo modo de uso.
-V muestra la versión instalada del cliente OpenSSH. Abajo está el resultado del servidor AlmaLinux que se conecta; en el servidor Debian 12 que recibe la conexión apareció OpenSSH_9.2p1.
ssh -VOpenSSH_9.9p1, OpenSSL 3.5.1 1 Jul 2025-G no se conecta al servidor: combina las opciones indicadas con los archivos de configuración y muestra los valores que se aplicarán realmente. La salida completa tiene 87 líneas, así que elegimos con grep solo las líneas necesarias.
ssh -G user@example.com | grep -E "^(user|hostname|port|identityfile|connecttimeout|stricthostkeychecking|serveraliveinterval) "user user
hostname example.com
port 22
stricthostkeychecking ask
serveraliveinterval 0
identityfile ~/.ssh/id_rsa
identityfile ~/.ssh/id_ecdsa
identityfile ~/.ssh/id_ecdsa_sk
identityfile ~/.ssh/id_ed25519
identityfile ~/.ssh/id_ed25519_sk
identityfile ~/.ssh/id_xmss
identityfile ~/.ssh/id_dsa
connecttimeout noneLas siete líneas identityfile son los archivos de clave predeterminados que ssh busca por orden cuando no se indica -i. connecttimeout none significa que no se ha fijado un tiempo de espera de conexión.
| Opción | Copiar | Descripción |
|---|---|---|
| -lCuenta | Indica el nombre de la cuenta con la que conectarse | |
| -pPuerto | Indica el puerto al que conectarse (22 por defecto) | |
| -iArchivo de clave | Indica el archivo de clave privada | |
| -v | Muestra el proceso de conexión en líneas debug1 | |
| -C | Comprime los datos que se intercambian | |
| -X | Reenvío X11 (programas GUI remotos) | |
| -T | No asigna una terminal virtual | |
| -t | Fuerza la asignación de una terminal virtual | |
| -n | Cambia la entrada estándar a /dev/null | |
| -q | Reduce los avisos y mensajes informativos | |
| -oopción=valor | Indica una opción del archivo de configuración solo para esta conexión | |
| -L | Reenvío de puertos local | |
| -F | Indica el archivo de configuración | |
| -G | Muestra la configuración que se aplicaría, sin conectarse | |
| -V | Muestra la versión del cliente OpenSSH |
| Opción | Copiar | Descripción |
|---|---|---|
| -N | Mantiene solo la conexión, sin comando remoto | |
| -J | Se conecta pasando por otro servidor |
3️⃣ La opción ssh -l y el reenvío de puertos con -L
-l es la opción que indica el nombre de la cuenta con la que conectarse. ssh -l user 192.0.2.10 se conectó con la misma cuenta que ssh user@192.0.2.10.
ssh -l user 192.0.2.10 whoamiuserAl comprobarlo con -G, la cuenta indicada con -l quedó en la entrada user.
ssh -G -l admin example.com | grep -E "^(user|hostname|port) "user admin
hostname example.com
port 22También comprobamos con -G cuál se aplica cuando se escriben a la vez -l y cuenta@dirección. En OpenSSH 9.9p1 se aplicó admin, la cuenta indicada con -l.
ssh -G -l admin user@example.com | grep -E "^(user|hostname) "user admin
hostname example.comLa -L mayúscula tiene un nombre parecido, pero es una opción de reenvío de puertos local que no tiene que ver con la cuenta. Pasa las conexiones que llegan a un puerto de tu servidor por dentro de la conexión SSH y las conecta a una dirección y un puerto del lado del servidor remoto.
8080:localhost:80 significa conectar el puerto 8080 de tu servidor con el puerto 80 de localhost visto desde el servidor remoto. Al comprobarlo con -G, el mismo valor quedó en la entrada localforward.
ssh -G -L 8080:localhost:80 user@example.com | grep -E "^(hostname|localforward) "hostname example.com
localforward 8080 [localhost]:80Cuando solo quieres dejar abierto el túnel, añade también -N, que mantiene la conexión sin comando remoto.
4️⃣ Indicar el puerto y el archivo de clave de SSH
Si el servidor SSH acepta conexiones en un puerto distinto del 22, indica el puerto con -p. -i indica un archivo de clave privada que no tiene el nombre predeterminado.
ssh -G -p 2222 -i ./mykey user@example.com | grep -E "^(user|hostname|port|identityfile) "user user
hostname example.com
port 2222
identityfile ./mykeyAl indicar -i, desaparecieron las siete líneas de archivos de clave predeterminados y solo quedó el archivo indicado.
Los archivos de clave se crean con ssh-keygen. Si ya usas una clave, indica un nombre de archivo nuevo con -f. Abajo está el resultado de crear una clave ed25519 con el nombre nuevo mykey.
ssh-keygen -t ed25519 -f ./mykey -N "" -C "user@example.com"Generating public/private ed25519 key pair.
Your identification has been saved in ./mykey
Your public key has been saved in ./mykey.pub
The key fingerprint is:
SHA256:XLbhLZHSNdMvUqhSIbzRNJi/zKKkNnWmy0mTeBoUfaY user@example.com
The key's randomart image is:
+--[ED25519 256]--+
| ..=+.+o |
| . =oo+.oo |
| . . +=B. . . |
| . =o=o=. . .|
| . E S++... . |
| . .o.+ +. |
| o+== . |
| +*oo |
| ...+. |
+----[SHA256]-----+mykey es la clave privada y mykey.pub es la clave pública. El manual de OpenSSH indica poner la clave pública en ~/.ssh/authorized_keys del servidor al que te vas a conectar. Puedes hacerlo con ssh-copy-id, como en [ssh-copy-id -i ./mykey.pub user@192.0.2.10].
Si te conectas a menudo al mismo servidor, escribe un alias en ~/.ssh/config y escribe solo ssh y el alias. La línea Host es el alias, y las líneas de debajo son los valores que se aplican al conectarse con ese alias.
Host myserver
HostName 192.0.2.10
User user
Port 2222
IdentityFile ~/.ssh/mykeyAl escribir esta configuración en un archivo ./config y leerla con -F, la dirección, la cuenta, el puerto y el archivo de clave se aplicaron todos con un solo alias.
ssh -F ./config -G myserver | grep -E "^(user|hostname|port|identityfile) "user user
hostname 192.0.2.10
port 2222
identityfile ~/.ssh/mykeyLas opciones escritas en la línea de comandos tienen prioridad sobre el archivo de configuración. Al añadir -p 22 al mismo alias, port cambió a 22.
ssh -F ./config -G -p 22 myserver | grep -E "^(hostname|port) "hostname 192.0.2.10
port 22hostname siguió siendo el 192.0.2.10 del archivo de configuración y solo port cambió al valor escrito en la línea de comandos.
5️⃣ Ejecutar comandos remotos con SSH
Si escribes un comando después del destino de la conexión, ssh ejecuta solo ese comando sin pantalla de inicio de sesión y cierra la conexión. Si hay varios comandos o símbolos del shell como el punto y coma, enciérralos entre comillas simples.
ssh user@192.0.2.10 'whoami; hostname'user
server2El código de salida del comando remoto volvió tal cual como código de salida de ssh. En los scripts, este valor indica si el comando remoto tuvo éxito.
ssh user@192.0.2.10 'exit 3'; echo $?3Al ejecutar un comando así no se asigna una terminal virtual. tty ejecutado con -T mostró [not a tty].
ssh -T user@192.0.2.10 ttynot a ttyEl manual de ssh describe -t como la opción que se usa para ejecutar programas basados en pantalla en el servidor remoto. Con -t apareció /dev/pts/0 y, al terminar, también un mensaje de que se cerró la conexión.
ssh -t user@192.0.2.10 tty/dev/pts/0
Connection to 192.0.2.10 closed.Al añadir -q, este mensaje no apareció.
ssh -t -q user@192.0.2.10 tty/dev/pts/0-n cambia la entrada estándar de ssh a /dev/null. Sin -n, el cat remoto mostró tal cual el hello pasado por la tubería.
echo hello | ssh user@192.0.2.10 cathelloecho hello | ssh -n user@192.0.2.10 catAl añadir -n al mismo comando, hello no llegó al cat remoto y no se mostró nada.
6️⃣ Errores de conexión SSH y depuración con ssh -v
Cuando no puedes conectarte, comprueba primero en el mensaje de error en qué etapa se detuvo. Cuando no se encontró la dirección del servidor, apareció [Could not resolve hostname].
ssh user@nosuchhost.invalidssh: Could not resolve hostname nosuchhost.invalid: Name or service not knownSi la dirección es correcta pero no hay respuesta en ese puerto, aparece [Connection timed out]. Con -o ConnectTimeout=5, terminó con este error a los 5 segundos.
ssh -o ConnectTimeout=5 -p 2222 user@192.0.2.10ssh: connect to host 192.0.2.10 port 2222: Connection timed outAl conectarnos con -o BatchMode=yes a un servidor que no estaba en known_hosts, terminó con [Host key verification failed.] sin preguntar por la clave de host. Para que la primera conexión de un script no se quede parada en la pregunta, se usa StrictHostKeyChecking=accept-new.
ssh -o BatchMode=yes user@192.0.2.10 trueHost key verification failed.Según el manual de ssh_config, accept-new guarda sin preguntar solo la clave de host de los servidores que no ha visto antes. Si llega una clave distinta de la ya guardada, rechaza la conexión.
ssh -o StrictHostKeyChecking=accept-new user@192.0.2.10 whoamiWarning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.
userSi la cuenta no tiene ninguna clave registrada, aparece [Permission denied (publickey)]. Si los fallos de autenticación se repiten, el servidor puede bloquear la IP que se conecta.
-v muestra el proceso de conexión en líneas debug1. La salida completa supera las 70 líneas, así que abajo están solo las líneas de las etapas de conexión y autenticación, elegidas con grep.
ssh -v -i ~/.ssh/id_ed25519 user@192.0.2.10 true 2>&1 | grep -E 'Connecting to|Connection established|remote software version|Server host key|is known and matches|can continue|Offering public key|Authenticated to|Exit status'debug1: Connecting to 192.0.2.10 [192.0.2.10] port 22.
debug1: Connection established.
debug1: Remote protocol version 2.0, remote software version OpenSSH_9.2p1 Debian-2+deb12u10
debug1: Server host key: ssh-ed25519 SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc
debug1: Host '192.0.2.10' is known and matches the ED25519 host key.
debug1: Authentications that can continue: publickey,password
debug1: Offering public key: /root/.ssh/id_ed25519 ED25519 SHA256:4bN7qT1xW9cK3mR6yH0sD2fL8vZ5aJ1eP7uG3oX4iQs explicit
Authenticated to 192.0.2.10 ([192.0.2.10]:22) using "publickey".
debug1: Exit status 0La línea Connecting to es el intento de conexión, y las líneas Server host key e is known and matches son la verificación de la clave de host. En la línea Offering public key se presentó la clave y en la línea Authenticated to terminó la autenticación por clave. Si se detiene en la autenticación, comprueba primero si en la línea Offering public key aparece el archivo de clave que quieres usar.
Al añadir -C, el valor compression de la línea kex cambió de none a zlib@openssh.com.
ssh -v -C user@192.0.2.10 true 2>&1 | grep -E 'compression'debug1: kex: server->client cipher: aes256-gcm@openssh.com MAC: <implicit> compression: zlib@openssh.com
debug1: kex: client->server cipher: aes256-gcm@openssh.com MAC: <implicit> compression: zlib@openssh.com
debug1: Enabling compression at level 6.-X es la opción que trae a tu equipo la pantalla de los programas GUI del servidor remoto. Al ejecutarla en un servidor AlmaLinux sin pantalla, apareció una línea debug1 que indica que no hay DISPLAY.
ssh -v -X user@192.0.2.10 true 2>&1 | grep DISPLAYdebug1: X11 forwarding requested but DISPLAY not setDISPLAY es la variable de entorno que define dónde se muestran las pantallas GUI. Por eso -X se usa al conectarse desde un equipo con escritorio.
🔲 Simulador del comando SSH
En el simulador de abajo puedes conectarte con ssh a un servidor virtual y probar tú mismo opciones, comandos remotos y ssh -G escribiéndolos.
🔢 FAQ & contenido recomendado
SSH
SSH en Linux: definición y configuración básica
Artículo que resume el origen de SSH, que sustituyó a Telnet sin cifrado, el puerto predeterminado 22, la autenticación por clave y cómo instalarlo.
Seguridad
Vulnerabilidad de OpenSSH CVE-2024-6387: bloqueo temporal y aplicación del parche
Artículo sobre cómo la vulnerabilidad de OpenSSH regreSSHion aprovecha la señal de alarma del tiempo de espera de inicio de sesión, y el orden en que aplicamos un bloqueo temporal y después el parche.
Cloudways
Cómo conectarse a Cloudways por SFTP y SSH: configuración de FileZilla, registro de claves SSH y lista blanca de IP
Artículo sobre cómo registrar una clave SSH en un servidor en la nube gestionado, añadir a la lista blanca la IP que se conecta y conectarse con ssh y FileZilla.
ℹ️ Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a través de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ↓)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, así que confírmalos con el vendedor antes de comprar. Los productos se eligen y evalúan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseñas.