GNU/Linux >> Tutoriales Linux >  >> Linux

Ejecutar comandos en sistemas Linux remotos a través de SSH

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.

Nota: Conoce la diferencia entre “&&” 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.


Linux
  1. Envía comandos a múltiples sesiones SSH con Terminator

  2. escriba un script de shell para ssh a una máquina remota y ejecute comandos

  3. Ejecutar comandos en una máquina remota a través de PHP

  4. Reproducir sonido *en* máquina remota a través de ssh en Ubuntu/Linux

  5. ¿Cómo instalar Linux de forma remota a través de SSH?

Comandos SSH en Linux con ejemplos de uso

Cómo SSH en un directorio particular en Linux

Cómo configurar el reenvío X11 usando SSH en Linux

Cómo realizar una copia de seguridad remota de Linux mediante SSH

Uso del comando SSH en sistemas Linux/Unix

Cómo SSH al servidor a través de Linux