Přehled
Mnohokrát potřebujeme pracovat se vzdálenými systémy Linux. Přihlásíme se ke vzdálenému hostiteli, provedeme práci a ukončíme relaci. Můžeme všechny tyto akce provádět z místního počítače? Ano, je to možné a tento tutoriál to demonstruje na vyčerpávajících příkladech.
Spuštění příkazu přes SSH
SSH nám umožňuje provádět příkazy na vzdáleném počítači bez přihlášení do tohoto počítače. V tomto tutoriálu probereme různé způsoby, jak toho dosáhnout.
Spustit jeden příkaz
Spusťte příkaz uname přes SSH.
$ ssh [email protected] uname
Pokud dodržujete výše uvedený příkaz, je podobný běžnému příkazu SSH s menším rozdílem. Přidali jsme příkaz k provedení (zvýrazněný červenou barvou).
Když provedeme tento příkaz. Vygeneruje níže uvedený výstup:
Linux
Provádět více příkazů
Pomocí této techniky můžeme provádět více příkazů pomocí jedné relace SSH. Potřebujeme pouze oddělit příkazy středníkem (;).
$ ssh [e-mail chráněný] "uname;hostname;date"
Podle očekávání tyto příkazy vygenerují následující výstup:
Linuxlinux-serverČt 1. března 15:47:59 IST 2018
Spustit příkaz se zvýšenými oprávněními
Někdy potřebujeme provést příkaz se zvýšenými oprávněními, v takovém případě jej můžeme použít se sudo.
$ ssh -t [e-mail chráněný] sudo touch /etc/banner.txt
Všimněte si, že jsme použili „-t ‘ možnost s SSH, která umožňuje alokaci pseudoterminálu. příkaz sudo vyžaduje interaktivní terminál, proto je tato volba nezbytná.
Spustit skript
Vzdálené provádění není omezeno pouze na příkazy; můžeme dokonce spustit skript přes SSH. Musíme pouze poskytnout absolutní cestu místního skriptu k příkazu SSH.
Vytvořme jednoduchý shell skript s následujícím obsahem a pojmenujeme jej jako system-info.sh
#!/bin/shunamehostname
Udělejte skript spustitelným a spusťte jej na vzdáleném serveru následovně:
$ chmod +x system-info.sh$ ssh [chráněno e-mailem] ./system-info.sh
Jak někteří z vás možná uhodli, vygeneruje následující výstup:
Linuxlinux-server
Problém s proměnnou expanzí
Pokud rozdělíme příkazy do více řádků, pak proměnná expanze nebude fungovat. Podívejme se na to na jednoduchém příkladu:
$ msg="Ahoj LinuxTechi"$ ssh [e-mail chráněn] 'echo $msg'
Když provedeme výše uvedený příkaz, můžeme pozorovat, že proměnná se nerozbaluje.
K vyřešení tohoto problému musíme použít -c možnost pláště. V našem případě jej použijeme s bash takto:
$ ssh [e-mail chráněný] bash -c "'echo $msg'"
Nakonfigurujte relaci SSH bez hesla
Ve výchozím nastavení SSH pokaždé požádá o ověření hesla. Toto je vynuceno z bezpečnostních důvodů. Někdy je to však nepříjemné. Abychom to překonali, můžeme použít mechanismus ověřování veřejného a soukromého klíče.
Lze jej nakonfigurovat pomocí následujících kroků:
1) Vygenerujte pár veřejného a soukromého klíče
SSH poskytuje nástroj ssh-keygen, který lze použít ke generování párů klíčů na místním počítači.
$ ssh-keygenGenerating public/private rsa key pair.Zadejte soubor, do kterého se má klíč uložit (/home/linuxtechi/.ssh/id_rsa):#stiskněte enterZadejte přístupové heslo (prázdné pro žádné heslo): zadejte stejné heslo znovu: # stiskněte enterVaše identifikace byla uložena do /home/linuxtechi/.ssh/id_rsa.Váš veřejný klíč byl uložen do /home/linuxtechi/.ssh/id_rsa.Výše uvedený výstup ukazuje, že vygenerované páry klíčů jsou uloženy v adresáři ~/.ssh.
2) Přidejte veřejný klíč do souboru ~/.ssh/authorized_keys na vzdáleném hostiteli
Jednoduchý způsob, jak to udělat, je použít příkaz ssh-copy-id.
$ ssh-copy-id -i ~/.ssh/id_rsa.pub [e-mail chráněný]Ve výše uvedeném příkazu:
- Volba -i označuje soubor identity
- ~/.ssh/id_rsa.pub je soubor identity
- zbývající text je IP vzdáleného uživatele a vzdáleného serveru
POZNÁMKA: Nikdy s nikým nesdílejte svůj soukromý klíč.
3) To je ono. není to tak jednoduché? Nyní můžeme provést příkaz přes SSH bez zadání hesla. Pojďme si to ověřit.
$ ssh [email protected] uname
Omezení ověřování pomocí veřejného a soukromého klíče
Myšlenka, že ověřování pomocí veřejného a soukromého klíče nám usnadňuje život, není dokonalé. Jeho hlavní nevýhodou je; nemůžeme to automatizovat, protože napoprvé je vyžadována interakce uživatele. Pamatovat !!! poskytli jsme heslo příkazu ssh-copy-id.
Není třeba propadat panice, tohle není konec světa. V další části probereme přístup, který toto omezení eliminuje.
nástroj sshpass
K překonání výše uvedeného omezení můžeme použít nástroj sshpass. Poskytuje neinteraktivní způsob ověřování relace SSH. Tato část pojednává o různých způsobech.
Instalace sshpass
Nástroj sshpass je součástí oficiálního úložiště Ubuntu. Můžeme jej nainstalovat pomocí následujících příkazů:
$ sudo apt-get update$ sudo apt-get install sshpass
Příklady
sshpass může přijmout heslo – jako argument, načíst ho ze souboru nebo pomocí proměnné prostředí. Pojďme diskutovat o všech těchto přístupech.
1) Heslo jako argument
Můžeme poskytnout heslo jako argument pomocí volby –p:
$ sshpass -p 'secret-password' ssh [email protected] uname
2) Heslo ze souboru
sshpass umí číst heslo z běžného souboru pomocí volby -f:
$ echo "secret-password"> password-file$ sshpass -f password-file ssh [email protected] uname
3) Heslo z proměnné prostředí
Kromě toho můžeme poskytnout heslo z proměnné prostředí pomocí volby -e:
$ export SSHPASS="secret-password"$ sshpass -e ssh [e-mail chráněný] uname
Závěr
Tento tutoriál ukazuje různé triky a tipy pro vzdálené provádění příkazů přes SSH. Jakmile tyto triky pochopíte, značně vám to usnadní život a rozhodně zvýší vaši produktivitu.
Přečtěte si také : 9 příkladů příkazů „diff“ v systému Linux