Comando SSH: uso de las opciones -l, -p e -i y comprobación de errores de conexión

Entorno de pruebaFamilia RHELAlmaLinux 9.8OpenSSH 9.9p1Lado receptor Debian 12 · OpenSSH 9.2p1 cuenta normalCuenta root
Comandos de redsshUbicación/usr/bin/ssh

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.10
Linux 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 whoami
The 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.
user

Una 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.10
The 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.

ssh
usage: 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 -V
OpenSSH_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 none

Las 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ónCopiarDescripción
-lCuentaIndica el nombre de la cuenta con la que conectarse
-pPuertoIndica el puerto al que conectarse (22 por defecto)
-iArchivo de claveIndica el archivo de clave privada
-vMuestra el proceso de conexión en líneas debug1
-CComprime los datos que se intercambian
-XReenvío X11 (programas GUI remotos)
-TNo asigna una terminal virtual
-tFuerza la asignación de una terminal virtual
-nCambia la entrada estándar a /dev/null
-qReduce los avisos y mensajes informativos
-oopción=valorIndica una opción del archivo de configuración solo para esta conexión
-LReenvío de puertos local
-FIndica el archivo de configuración
-GMuestra la configuración que se aplicaría, sin conectarse
-VMuestra la versión del cliente OpenSSH
OpciónCopiarDescripción
-NMantiene solo la conexión, sin comando remoto
-JSe 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 whoami
user

Al 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 22

Tambié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.com

La -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]:80

Cuando 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 ./mykey

Al 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/mykey

Al 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/mykey

Las 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 22

hostname 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
server2

El 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 $?
3

Al 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 tty
not a tty

El 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 cat
hello
echo hello | ssh -n user@192.0.2.10 cat

Al 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.invalid
ssh: Could not resolve hostname nosuchhost.invalid: Name or service not known

Si 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.10
ssh: connect to host 192.0.2.10 port 2222: Connection timed out

Al 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 true
Host 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 whoami
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.
user

Si 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 0

La 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 DISPLAY
debug1: X11 forwarding requested but DISPLAY not set

DISPLAY 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.

Simulador del comando SSHAlmaLinux 9.8 → Debian 12
[root@server work]#
Funciona solo dentro del navegador y no se conecta a ningún servidor real. Con ↑↓ recuperas los comandos que escribiste antes.

🔢 FAQ & contenido recomendado

Si añades -o ServerAliveInterval=60, se envía una señal al servidor cada 60 segundos para mantener la conexión. Al comprobarlo con -G, serveraliveinterval cambió del valor predeterminado 0 a 60. Para no escribirlo cada vez, pon la misma entrada bajo Host en ~/.ssh/config.

El modo de uso de ssh no tiene ninguna opción que reciba una contraseña. Con la autenticación por contraseña, se escribe cuando se pregunta al conectarse; para tareas que deben conectarse automáticamente, se autentica con una clave creada con ssh-keygen.

Escribe en -J el servidor por el que pasar. Al comprobar [ssh -J admin@bastion.example.com user@192.0.2.10] con -G, el servidor por el que pasar quedó en la entrada proxyjump.

ℹ️ 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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Demuestra que eres humano: 8   +   7   =