El otro día estaba probando cómo mantener intactos los permisos de los archivos al copiar archivos o directorios a múltiples ubicaciones y sistemas. Cuando quería verificar los permisos de archivo en un sistema remoto, tenía que iniciar sesión en ese sistema a través de SSH y verificar los atributos. El proceso de inicio y cierre de sesión del sistema remoto varias veces fue un poco molesto para mí. Pensé que sería mejor si pudiera ejecutar comandos en sistemas Linux remotos a través de SSH.
Afortunadamente, encontré una solución para hacerlo después de buscar en las páginas man de ssh
dominio. Si alguna vez se preguntó cómo ejecutar un comando o secuencia de comandos en un sistema remoto desde su propio sistema local sin tener que iniciar sesión en ese sistema remoto, aquí le indicamos cómo hacerlo.
Ejecute comandos en sistemas Linux remotos a través de SSH
La forma típica de ejecutar un comando o script en un sistema remoto a través de SSH desde el sistema local es:
$ ssh <[email protected]_Address-or-Doman_name> <Command-or-Script>
Permítame mostrarle algunos ejemplos.
Ejecute un solo comando en sistemas remotos a través de SSH
Digamos que desea encontrar detalles del Kernel de su sistema Linux remoto. Para hacerlo, simplemente ejecute:
$ ssh [email protected] uname -a
Aquí,
sk
es el nombre de usuario de mi sistema remoto,192.168.225.22
es la dirección IP del sistema remoto,- Y
"uname -a"
es el comando que quiero ejecutar en el sistema remoto desde mi sistema local.
Salida de muestra:

Ejecutar comandos en sistemas Linux remotos a través de SSH
¿Ver? En realidad, no he iniciado sesión en el sistema remoto, pero ejecuté uname
comando en el sistema remoto a través de SSH y mostré el resultado en la Terminal de mi sistema local.
También puede especificar el comando entre comillas como se muestra a continuación.
$ ssh [email protected] "uname -a"
O,
$ ssh [email protected] 'uname -a'
Si ha cambiado el puerto predeterminado del protocolo SSH , solo menciónalo usando -p
parámetro como a continuación.
$ ssh -p 2200 [email protected] uname -a
Ejecute varios comandos en sistemas remotos a través de SSH
También puede ejecutar varios comandos en el control remoto especificándolos entre comillas como se muestra a continuación.
$ ssh [email protected] "uname -r && lsb_release -a"
O,
$ ssh [email protected] "uname -r ; lsb_release -a"
Los comandos anteriores mostrarán la versión del Kernel y los detalles de distribución de mi servidor Ubuntu.
Salida de muestra:

Ejecute varios comandos en sistemas remotos a través de SSH en Linux
Como uno de nuestros lectores mencionó en la sección de comentarios a continuación, debe especificar varios comandos entre comillas. Si no usa comillas, el primer comando se ejecutará en el sistema remoto y el segundo comando se evaluará solo en la máquina local. El comando completo entre comillas se procesará de forma remota según lo previsto.
“&&”
y “;”
operadores entre comandos:
El “&&”
el operador ejecuta el segundo comando solo si el primer comando fue exitoso.
Ejemplo:
sudo apt-get update && sudo apt-get upgrade
En el caso anterior, el segundo comando (sudo apt-get upgrade
) se ejecutará si el primer comando fue exitoso. De lo contrario, no se ejecutará.
El “;”
el operador ejecuta el segundo comando incluso si el primer comando fue exitoso o falló.
Ejemplo:
sudo apt-get update ; sudo apt-get upgrade
En el caso anterior, el segundo comando (sudo apt-get upgrade
) se ejecutará incluso si falla el primer comando.
Ejecutar comandos con privilegios "sudo" en sistemas remotos a través de SSH
Algunos comandos requieren "sudo"
privilegios para ejecutar. Por ejemplo, el siguiente comando instalará Vim en mi sistema remoto.
$ ssh -t [email protected] sudo apt install apache2
Salida de muestra:

Ejecute comandos con privilegios "sudo" en sistemas remotos a través de SSH
¿Te diste cuenta? He usado -t
bandera en el comando anterior. Necesitamos mencionar esto -t
bandera para forzar la asignación de pseudo-terminal. Esto se puede usar para ejecutar programas arbitrarios basados en pantalla en una máquina remota, lo que puede ser muy útil, p. al implementar servicios de menú.
Además, he ingresado la contraseña dos veces . La primera vez que ingresé la contraseña del usuario remoto para acceder al sistema remoto a través de SSH desde mi sistema local y la segunda contraseña es necesaria para dar permiso sudo al usuario remoto para instalar la aplicación (es decir, apache2 en este caso) en el sistema remoto .
Verifiquemos si el servicio Apache se está ejecutando usando el comando:
$ ssh -t [email protected] sudo systemctl status apache2 [email protected]'s password: [sudo] password for sk: ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Thu 2019-12-19 11:08:03 UTC; 52s ago Main PID: 5251 (apache2) Tasks: 55 (limit: 2318) CGroup: /system.slice/apache2.service ├─5251 /usr/sbin/apache2 -k start ├─5253 /usr/sbin/apache2 -k start └─5254 /usr/sbin/apache2 -k start Dec 19 11:08:03 ubuntuserver systemd[1]: Starting The Apache HTTP Server... Dec 19 11:08:03 ubuntuserver apachectl[5227]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 2409:4072:51f:a1b6:a00:27ff:f Dec 19 11:08:03 ubuntuserver systemd[1]: Started The Apache HTTP Server.
Del mismo modo, podemos ejecutar cualquier comando o script en un sistema remoto a través de SSH desde el sistema local.
Ejecute scripts locales en sistemas remotos a través de SSH
Permítanos crear un script simple en nuestro sistema local para mostrar toda la información disponible sobre el nombre de distribución de su sistema remoto, la administración de paquetes y los detalles básicos, etc.
$ vi system_information.sh
Agregue las siguientes líneas:
#!/bin/bash #Name: Display System Details #Owner: OSTechNIx #---------------------------- echo /etc/*_ver* /etc/*-rel*; cat /etc/*_ver* /etc/*-rel*
Presiona ESC
clave y escriba :wq
para guardar el archivo y salir.
Ahora ejecute este script en su sistema remoto a través de SSH usando el comando:
$ ssh [email protected] 'bash -s' < system_information.sh
Salida de muestra:
[email protected]'s password: /etc/debian_version /etc/lsb-release /etc/os-release buster/sid DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS" NAME="Ubuntu" VERSION="18.04.2 LTS (Bionic Beaver)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 18.04.2 LTS" VERSION_ID="18.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=bionic UBUNTU_CODENAME=bionic
Si no especifica 'bash -s'
en el comando anterior, obtendrá los detalles del sistema remoto, pero no se asignará el Pseudo-terminal.
Guardar la salida del sistema remoto en el sistema local
Esto puede ser útil si desea compartir el resultado de un comando que ejecuta en el sistema remoto a través de SSH con su equipo de soporte o colega.
El siguiente comando ejecutará "du -ah"
en su sistema remoto a través de SSH y guarde la salida en diskusage.txt
archivo en su sistema local.
$ ssh [email protected] du -ah > diskusage.txt
Luego puede analizar los detalles de uso del disco al ver el diskusage.txt
archivo usando cat
visores de comandos o de texto.
$ cat diskusage.txt 4.0K ./.profile 4.0K ./.gnupg/private-keys-v1.d 8.0K ./.gnupg 76K ./data/image.jpg 128K ./data/file.pdf 20K ./data/text.docx 5.9M ./data/audio.mp3 6.1M ./data 0 ./.sudo_as_admin_successful 4.0K ./pacman?inline=false 4.0K ./.bash_logout 4.0K ./.wget-hsts 4.0K ./.bash_history 0 ./.cache/motd.legal-displayed 4.0K ./.cache 4.0K ./deb-pacman_1.0-0.deb 4.0K ./.bashrc 6.2M .
Configure la autenticación basada en claves SSH para evitar escribir contraseñas
Si ejecuta comandos en sistemas remotos con frecuencia, es posible que desee configurar la autenticación basada en clave SSH para omitir la escritura de contraseña cada vez. Se pueden encontrar más detalles en el siguiente enlace.
- Cómo configurar la autenticación basada en clave SSH en Linux
Lectura sugerida:
- Cómo reanudar archivos transferidos parcialmente a través de SSH mediante Rsync
- Cómo ejecutar un solo comando en varios sistemas remotos a la vez
- DSH:ejecute un comando de Linux en varios hosts a la vez
- Cómo crear un alias SSH en Linux
- SSLH:comparta un mismo puerto para HTTPS y SSH
- ScanSSH:servidor SSH rápido y escáner proxy abierto
- Cómo usar SSH en un directorio particular en Linux
- Permitir o denegar el acceso SSH a un usuario o grupo en particular en Linux
- Cómo evitar que la sesión SSH se desconecte en Linux
- Cómo habilitar SSH en FreeBSD
- Consejos de Vim:edite archivos remotos con Vim en Linux
Espero que esto ayude.