GNU/Linux >> Linux Esercitazione >  >> Linux

Esegui comandi su sistemi Linux remoti tramite SSH

L'altro giorno stavo testando come mantenere intatte le autorizzazioni dei file durante la copia di file o directory a più posizioni e sistemi. Quando volevo controllare i permessi dei file su un sistema remoto, dovevo accedere a quel sistema tramite SSH e controllare gli attributi. Il processo di accesso e disconnessione dal sistema remoto più volte è stato un po' fastidioso per me. Ho pensato che sarebbe stato meglio se fossi in grado di eseguire comandi su sistemi Linux remoti tramite SSH.

Fortunatamente, trovo una soluzione alternativa per farlo dopo aver esaminato le pagine man di ssh comando. Se ti sei mai chiesto come eseguire un comando o uno script su un sistema remoto dal tuo sistema locale stesso senza dover accedere a quel sistema remoto, ecco come farlo.

Esegui comandi su sistemi Linux remoti tramite SSH

Il modo tipico per eseguire un comando o uno script su un sistema remoto tramite SSH dal sistema locale è:

$ ssh <[email protected]_Address-or-Doman_name> <Command-or-Script>

Permettetemi di mostrarvi alcuni esempi.

Esegui un singolo comando su sistemi remoti tramite SSH

Diciamo che vuoi trovare i dettagli del kernel del tuo sistema Linux remoto. Per farlo, esegui semplicemente:

$ ssh [email protected] uname -a

Ecco,

  • sk è il nome utente del mio sistema remoto,
  • 192.168.225.22 è l'indirizzo IP del sistema remoto,
  • E "uname -a" è il comando che voglio eseguire sul sistema remoto dal mio sistema locale.

Risultato di esempio:

Esegui comandi su sistemi Linux remoti tramite SSH

Vedere? In realtà non ho effettuato l'accesso al sistema remoto, ma ho eseguito uname comando sul sistema remoto su SSH e visualizzato l'output nel terminale del mio sistema locale.

Puoi anche specificare il comando tra virgolette come di seguito.

$ ssh [email protected] "uname -a"

Oppure,

$ ssh [email protected] 'uname -a'

Se hai cambiato la porta predefinita del protocollo SSH , menzionalo usando -p parametro come di seguito.

$ ssh -p 2200 [email protected] uname -a

Esegui più comandi su sistemi remoti tramite SSH

Puoi anche eseguire più comandi sul telecomando specificandoli tra virgolette come di seguito.

$ ssh [email protected] "uname -r && lsb_release -a"

Oppure,

$ ssh [email protected] "uname -r ; lsb_release -a"

I comandi precedenti visualizzeranno la versione del kernel e i dettagli di distribuzione del mio server Ubuntu.

Risultato di esempio:

Esegui più comandi su sistemi remoti tramite SSH su Linux

Come uno dei nostri lettori menzionato nella sezione commenti qui sotto, dovresti specificare più comandi tra virgolette. Se non si utilizzano virgolette, il primo comando verrà eseguito sul sistema remoto e il secondo comando verrà valutato solo sulla macchina locale. L'intero comando tra virgolette verrà elaborato in remoto come previsto.

Nota: Conosci la differenza tra “&&” e “;” operatori tra i comandi:

Il “&&” l'operatore esegue il secondo comando solo se il primo comando ha avuto successo.

Esempio:

sudo apt-get update && sudo apt-get upgrade

Nel caso precedente, il secondo comando (sudo apt-get upgrade ) verrà eseguito se il primo comando ha avuto successo. In caso contrario, non verrà eseguito.

Il “;” l'operatore esegue il secondo comando anche se il primo comando ha avuto esito positivo o negativo.

Esempio:

sudo apt-get update ; sudo apt-get upgrade

Nel caso precedente, il secondo comando (sudo apt-get upgrade ) verrà eseguito anche se il primo comando non è riuscito.

Esegui comandi con privilegi "sudo" su sistemi remoti tramite SSH

Alcuni comandi richiedono "sudo" privilegi per l'esecuzione. Ad esempio, il comando seguente installerà Vim sul mio sistema remoto.

$ ssh -t [email protected] sudo apt install apache2

Risultato di esempio:

Esegui comandi con privilegi "sudo" su sistemi remoti tramite SSH

Hai notato? Ho usato -t flag nel comando precedente. Dobbiamo menzionare questo -t flag per forzare l'allocazione pseudo-terminale. Questo può essere utilizzato per eseguire programmi arbitrari basati su schermo su una macchina remota, il che può essere molto utile, ad es. durante l'implementazione dei servizi di menu.

Inoltre, ho inserito la password due volte . La prima volta che ho inserito la password dell'utente remoto per accedere al sistema remoto tramite SSH dal mio sistema locale e la seconda password è richiesta per dare sudo il permesso all'utente remoto di installare l'applicazione (cioè apache2 in questo caso) sul sistema remoto .

Controlliamo se il servizio Apache è in esecuzione usando il 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.

Allo stesso modo, possiamo eseguire qualsiasi comando o script su un sistema remoto tramite SSH dal sistema locale.

Esegui script locali su sistemi remoti tramite SSH

Creiamo un semplice script sul nostro sistema locale per visualizzare tutte le informazioni disponibili sul nome di distribuzione del tuo sistema remoto, sulla gestione dei pacchetti e sui dettagli di base, ecc.

$ vi system_information.sh

Aggiungi le seguenti righe:

#!/bin/bash
#Name: Display System Details
#Owner: OSTechNIx
#----------------------------
echo /etc/*_ver* /etc/*-rel*; cat /etc/*_ver* /etc/*-rel*

Premi ESC digitare e digitare :wq per salvare il file ed uscire.

Ora esegui questo script sul tuo sistema remoto su SSH usando il comando:

$ ssh [email protected] 'bash -s' < system_information.sh

Risultato di esempio:

Password di
[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

Se non specifichi 'bash -s' nel comando precedente, otterrai i dettagli del sistema remoto ma lo pseudo-terminale non verrà allocato.

Salva l'output dal sistema remoto al sistema locale

Questo può essere utile se vuoi condividere l'output di un comando che esegui sul sistema remoto tramite SSH con il tuo team di supporto o collega.

Il comando seguente eseguirà "du -ah" sul tuo sistema remoto tramite SSH e salva l'output in diskusage.txt file nel tuo sistema locale.

$ ssh [email protected] du -ah > diskusage.txt

È quindi possibile analizzare i dettagli sull'utilizzo del disco visualizzando il diskusage.txt file utilizzando cat visualizzatori di comandi o di testo.

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

Configura l'autenticazione basata su chiave SSH per evitare la digitazione della password

Se esegui spesso i comandi su sistemi remoti, potresti voler configurare l'autenticazione basata su chiave SSH per saltare la digitazione della password ogni volta. Maggiori dettagli sono disponibili al seguente link.

  • Come configurare l'autenticazione basata su chiave SSH in Linux

Lettura consigliata:

  • Come riprendere i file trasferiti parzialmente su SSH utilizzando Rsync
  • Come eseguire un comando singolo su più sistemi remoti contemporaneamente
  • DSH:esegui un comando Linux su più host alla volta
  • Come creare alias SSH in Linux
  • SSLH:condividi una stessa porta per HTTPS e SSH
  • ScanSSH:server SSH veloce e scanner proxy aperto
  • Come inserire SSH in una directory particolare su Linux
  • Consenti o nega l'accesso SSH a un particolare utente o gruppo in Linux
  • Come impedire la disconnessione della sessione SSH in Linux
  • Come abilitare SSH su FreeBSD
  • Suggerimenti Vim - Modifica file remoti con Vim su Linux

Spero che questo aiuti.


Linux
  1. Invia comandi a più sessioni SSH con Terminator

  2. Amministrazione di massa/remota Linux?

  3. 11 Utili comandi “ssh” e “scp” in Linux

  4. linux esegue il comando da remoto

  5. Esegui i comandi sulla macchina remota tramite PHP

Comandi SSH in Linux con esempi di utilizzo

Come SSH in una directory particolare su Linux

Come configurare l'inoltro X11 utilizzando SSH in Linux

Come eseguire un backup Linux remoto utilizzando SSH

Utilizzo del comando SSH nei sistemi Linux/Unix

Come eseguire l'SSH sul server tramite Linux