GNU/Linux >> Znalost Linux >  >> Linux

Provádějte příkazy na vzdálených systémech Linux přes SSH

Onehdy jsem testoval, jak uchovat práva k souborům beze změny při kopírování souborů nebo adresářů na více míst a systémů. Když jsem chtěl zkontrolovat oprávnění k souborům na vzdáleném systému, musel jsem se do tohoto systému přihlásit přes SSH a zkontrolovat atributy. Proces opakovaného přihlašování a odhlašování ze vzdáleného systému mi byl trochu nepříjemný. Myslel jsem, že by bylo lepší, kdybych mohl spouštět příkazy na vzdálených systémech Linux přes SSH.

Naštěstí jsem našel řešení, jak to udělat, když jsem se podíval do manuálových stránek ssh příkaz. Pokud jste někdy přemýšleli, jak spustit příkaz nebo skript na vzdáleném systému ze samotného místního systému, aniž byste se museli k tomuto vzdálenému systému přihlašovat, zde je návod, jak to udělat.

Spouštět příkazy na vzdálených systémech Linux přes SSH

Typický způsob, jak spustit příkaz nebo skript na vzdáleném systému přes SSH z místního systému, je:

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

Dovolte mi, abych vám ukázal několik příkladů.

Spusťte jeden příkaz na vzdálených systémech přes SSH

Řekněme, že chcete najít podrobnosti o jádře vašeho vzdáleného systému Linux. Chcete-li to provést, jednoduše spusťte:

$ ssh [email protected] uname -a

Tady,

  • sk je uživatelské jméno mého vzdáleného systému,
  • 192.168.225.22 je IP adresa vzdáleného systému,
  • A "uname -a" je příkaz, který chci spustit na vzdáleném systému z mého místního systému.

Ukázkový výstup:

Provádějte příkazy na vzdálených systémech Linux přes SSH

Vidět? Ve skutečnosti jsem se nepřihlásil do vzdáleného systému, ale provedl jsem uname příkaz na vzdáleném systému přes SSH a zobrazil výstup v terminálu mého místního systému.

Můžete také zadat příkaz v uvozovkách, jak je uvedeno níže.

$ ssh [email protected] "uname -a"

Nebo,

$ ssh [email protected] 'uname -a'

Pokud jste změnili výchozí port protokolu SSH , stačí to zmínit pomocí -p parametr jako níže.

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

Spouštějte více příkazů na vzdálených systémech prostřednictvím SSH

Můžete také spouštět více příkazů na dálkovém ovládání tak, že je uvedete v uvozovkách, jak je uvedeno níže.

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

Nebo,

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

Výše uvedené příkazy zobrazí verzi jádra a podrobnosti o distribuci mého serveru Ubuntu.

Ukázkový výstup:

Spusťte více příkazů na vzdálených systémech prostřednictvím SSH v systému Linux

Jako jeden z našich čtenářů zmíněný v sekci komentářů níže byste měli zadat více příkazů v uvozovkách. Pokud nepoužijete uvozovky, první příkaz se provede na vzdáleném systému a druhý příkaz bude vyhodnocen pouze na místním počítači. Celý příkaz v uvozovkách bude zpracován vzdáleně, jak bylo zamýšleno.

Poznámka: Poznejte rozdíl mezi “&&” a “;” operátory mezi příkazy:

“&&” operátor provede druhý příkaz, pouze pokud byl první příkaz úspěšný.

Příklad:

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

Ve výše uvedeném případě druhý příkaz (sudo apt-get upgrade ) se provede, pokud byl první příkaz úspěšný. Jinak se nespustí.

“;” operátor provede druhý příkaz, i když byl první příkaz úspěšný nebo neúspěšný.

Příklad:

sudo apt-get update ; sudo apt-get upgrade

Ve výše uvedeném případě druhý příkaz (sudo apt-get upgrade ) se provede, i když selže první příkaz.

Spouštějte příkazy s právy "sudo" na vzdálených systémech přes SSH

Některé příkazy vyžadují "sudo" oprávnění ke spuštění. Například následující příkaz nainstaluje Vim na mém vzdáleném systému.

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

Ukázkový výstup:

Spouštějte příkazy s právy "sudo" na vzdálených systémech přes SSH

Všiml sis? Použil jsem -t příznak ve výše uvedeném příkazu. Musíme zmínit toto -t příznak pro vynucení přidělení pseudoterminálu. Toho lze využít ke spouštění libovolných obrazovkových programů na vzdáleném počítači, což může být velmi užitečné, např. při implementaci služeb menu.

Také jsem zadal heslo dvakrát . Poprvé jsem zadal heslo vzdáleného uživatele pro přístup ke vzdálenému systému přes SSH z mého lokálního systému a druhé heslo je vyžadováno k udělení sudo oprávnění vzdálenému uživateli k instalaci aplikace (v tomto případě apache2) na vzdálený systém .

Zkontrolujeme, zda služba Apache běží pomocí příkazu:

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

Podobně můžeme spustit jakýkoli příkaz nebo skript na vzdáleném systému přes SSH z místního systému.

Spouštějte místní skripty na vzdálených systémech prostřednictvím SSH

Dovolte nám vytvořit jednoduchý skript v našem lokálním systému, který zobrazí všechny dostupné informace o názvu distribuce vašeho vzdáleného systému, správě balíčků a základních podrobnostech atd.

$ vi system_information.sh

Přidejte následující řádky:

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

Stiskněte ESC a zadejte :wq pro uložení souboru a ukončení.

Nyní spusťte tento skript na vašem vzdáleném systému přes SSH pomocí příkazu:

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

Ukázkový výstup:

[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

Pokud nezadáte 'bash -s' ve výše uvedeném příkazu získáte podrobnosti o vzdáleném systému, ale Pseudoterminál nebude přidělen.

Uložení výstupu ze vzdáleného systému do místního systému

To může být užitečné, pokud chcete sdílet výstup příkazu, který spouštíte na vzdáleném systému přes SSH, se svým týmem podpory nebo kolegou.

Následující příkaz spustí "du -ah" na vašem vzdáleném systému přes SSH a uložte výstup do diskusage.txt soubor ve vašem místním systému.

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

Poté můžete analyzovat podrobnosti o využití disku zobrazením diskusage.txt soubor pomocí cat příkazové nebo textové prohlížeče.

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

Nakonfigurujte ověřování pomocí klíče SSH, abyste se vyhnuli zadávání hesla

Pokud často spouštíte příkazy na vzdálených systémech, možná budete chtít nakonfigurovat ověřování založené na klíči SSH tak, aby pokaždé vynechalo zadávání hesla. Více podrobností naleznete na následujícím odkazu.

  • Jak nakonfigurovat ověřování pomocí klíče SSH v systému Linux

Doporučené čtení:

  • Jak obnovit částečně přenesené soubory přes SSH pomocí Rsync
  • Jak spustit jeden příkaz na více vzdálených systémech najednou
  • DSH – Spusťte příkaz Linux na více hostitelích současně
  • Jak vytvořit alias SSH v systému Linux
  • SSLH – Sdílejte stejný port pro HTTPS a SSH
  • ScanSSH – rychlý server SSH a otevřený skener proxy
  • Jak SSH do konkrétního adresáře v systému Linux
  • Povolení nebo odepření přístupu SSH konkrétnímu uživateli nebo skupině v systému Linux
  • Jak zabránit odpojování relace SSH v systému Linux
  • Jak povolit SSH na FreeBSD
  • Tipy pro Vim – Upravujte vzdálené soubory pomocí Vim v systému Linux

Doufám, že to pomůže.


Linux
  1. Odesílejte příkazy do více relací SSH pomocí Terminátora

  2. Příkazy pro generování klíče SSH v Linuxu

  3. 11 Užitečné příkazy „ssh“ a „scp“ v Linuxu

  1. Ssh – spouštět vzdálené příkazy, zcela se odpojit od připojení Ssh?

  2. napište skript shellu pro ssh na vzdálený počítač a spusťte příkazy

  3. Spouštějte příkazy na vzdáleném počítači pomocí PHP

  1. linux spustit příkaz vzdáleně

  2. Přehrávejte zvuk *na* vzdáleném počítači přes ssh na Ubuntu / Linuxu

  3. Jak vzdáleně nainstalovat Linux přes SSH?