Tips en Trucs 2018

Opdrachten uitvoeren via ssh

SSH verbindt twee computers op een veilige manier en wordt meestal gebruikt om een terminal op een ander computer te starten. Maar je kunt een SSH verbinding ook gebruiken om opdrachten op een andere computer te laten uitvoeren. Om de opdracht df op de pindabook computer uit te voeren, start je op de computer main de volgende opdracht:

dany@main:~> ssh pindabook df
Bestandssysteem 1K-blokken Gebruikt Beschikbaar Geb% Aangekoppeld op
devtmpfs           4029152        0     4029152   0% /dev
tmpfs              4037348        0     4037348   0% /dev/shm
tmpfs              4037348     9880     4027468   1% /run
tmpfs              4037348        0     4037348   0% /sys/fs/cgroup
/dev/sda4         82042776 11611220    66220872  15% /
/dev/sda2           262144    57616      204528  22% /boot/efi
/dev/sda7        153906204 29101856   116963328  20% /usr/home/Documents
tmpfs               807468       20      807448   1% /run/user/1000

De authentificatie voor de SSH verbinding verloopt hierbij via sleutelparen en niet via een wachtwoord. Dit is niet alleen handiger, maar ook veiliger. Daarenboven kan je daardoor via SSH verbindingen uitgevoerde opdrachten in scripts opnemen.

Meerdere externe opdrachten via een SSH verbinding uitvoeren

Meerdere na elkaar uit te voeren externe opdrachten worden door punt komma's gescheiden. Om de externe opdrachten df en uptime op de pindabook computer uit te voeren, start je de opdracht:

dany@main:~> ssh pindabook df;uptime
Bestandssysteem 1K-blokken Gebruikt Beschikbaar Geb% Aangekoppeld op
devtmpfs           4029152        0     4029152   0% /dev
tmpfs              4037348        0     4037348   0% /dev/shm
tmpfs              4037348     9880     4027468   1% /run
tmpfs              4037348        0     4037348   0% /sys/fs/cgroup
/dev/sda4         82042776 11611232    66220860  15% /
/dev/sda2           262144    57616      204528  22% /boot/efi
/dev/sda7        153906204 29101856   116963328  20% /usr/home/Documents
tmpfs               807468       20      807448   1% /run/user/1000
 20:49:45  in bedrijf   3:59,  2 gebruikers,  gemiddelde belasting: 0,31, 0,27, 0,27

Onder voorbehoud externe opdrachten uitvoeren

Je kunt een tweede opdracht enkel uitvoeren, na het succesvol uitvoeren van een vorige opdracht door de opdrachten te scheiden met && en tussen enkele aanhalingstekens te plaatsen. Met de volgende opdracht worden de drie externe opdrachten enkel uitgevoerd als de vorige opdracht succesvol was.

dany@main:~> ssh pindabook 'mkdir /tmp/data && touch /tmp/data/test.txt && ls -l /tmp/data'
totaal 0
-rw-r--r-- 1 dany users 0 19 okt 20:59 test.txt
dany@main:~> ssh pindabook 'mkdir /tmp/data && touch /tmp/data/test.txt && ls -l /tmp/data'
mkdir: kan map ‘/tmp/data’ niet aanmaken: Bestand bestaat al
dany@main:~> ssh pindabook rm -r /tmp/data

Bij de tweede opdracht, bestaat de aan te maken map reeds waardoor de aanmaak van de map mislukt en de twee daaropvolgende externe opdrachten niet uitgevoerd worden. Met de laatste opdracht verwijderen we de extern aangemaakte map.

Externe opdrachten met root rechten uitvoeren

Als root gebruiker kan je normaal geen SSH verbinding opbouwen, maar via de externe sudo opdracht kan je toch extern met root rechten opdrachten uitvoeren:

dany@main:~> ssh -t pindabook sudo ls -al /root
[sudo] wachtwoord voor root: 
totaal 56
drwx------ 10 root root 4096 17 okt 15:03 .
drwxr-xr-x 22 root root 4096 17 okt 08:32 ..
-rw-------  1 root root 5116 16 okt 10:54 .bash_history
drwxr-xr-x  2 root root 4096  7 jun 20:45 bin
drwx------  3 root root 4096  5 okt 12:40 .cache
drwxr-xr-x  5 root root 4096 28 sep 16:24 .config
drwx------  3 root root 4096 28 mei 12:39 .dbus
drwx------  2 root root 4096  7 jun 20:45 .gnupg
drwx------  2 root root 4096 22 jun 10:54 .gvfs
drwxr-xr-x  4 root root 4096 27 mei 19:21 inst-sys
-rw-------  1 root root  627 19 aug 14:26 .joe_state
drwxr-xr-x  3 root root 4096 28 mei 17:52 .local
-rw-------  1 root root  150 28 mei 18:40 .mysql_history
Connection to pindabook closed.

De -t optie zorgt ervoor dat SSH een interactie shell gebruikt. Deze is noodzakelijk om het root wachtwoord in te geven. Zonder de -t optie krijg je de volgende melding:

dany@main:~> ssh pindabook sudo ls -al /root
sudo: geen terminal aanwezig en geen wachtwoordvraag(askpass)-programma opgegeven

Meerdere externe opdrachten uitvoeren met Here doc

Ook de 'Here document' methode kan je gebruiken om meerdere externe opdrachten uit te voeren. Daarbij worden de uit te voeren externe opdrachten opgesomd in een tag met een woord zoals HERE. De tag woorden zijn in feite de start en stop signalen.

dany@main:~> ssh pindabook << HERE
> uptime
> free -m
> date
> HERE
Pseudo-terminal will not be allocated because stdin is not a terminal.
 13:52:25  in bedrijf   0:06,  1 gebruiker,  gemiddelde belasting: 0,01, 0,08, 0,06
              total        used        free      shared  buff/cache   available
Mem:           7885         539        6524          87         822        7014
Swap:          8190           0        8190
za 20 okt 2018 13:52:25 CEST

Gebruik de -T optie om de Pseudo-terminal melding op te heffen:

dany@main:~> ssh -T pindabook << HERE
uptime
free -m
date
HERE

 13:54:40  in bedrijf   0:09,  1 gebruiker,  gemiddelde belasting: 0,00, 0,05, 0,05
              total        used        free      shared  buff/cache   available
Mem:           7885         540        6522          87         822        7013
Swap:          8190           0        8190
za 20 okt 2018 13:54:40 CEST

Nog een voorbeeld:

SSH Here Doc

Meerdere externe opdrachten uitvoeren met Bash

Je kunt meerdere externe opdrachten uitvoeren door ze in een Bash script te verzamelen:

dany@main:~> echo free -m > script.sh                                                                                                
dany@main:~> echo date >> script.sh                                                                                               
dany@main:~> echo hostname >> script.sh                                                                                              
dany@main:~> echo uptime >> script.sh                                                                                              
dany@main:~> cat script.sh                                                                                                           
free -m
date
hostname
uptime

Voer dit locale script nu extern uit met de volgende opdracht:

dany@main:~> ssh pindabook 'bash -s' < script.sh 
              total        used        free      shared  buff/cache   available
Mem:           7885         542        6499          87         843        7004
Swap:          8190           0        8190
za 20 okt 2018 14:07:48 CEST
pindabook.pindanet.home
 14:07:48  in bedrijf   0:22,  1 gebruiker,  gemiddelde belasting: 0,00, 0,00, 0,00

Zo kan je complexe lokale scripts op een andere computer laten uitvoeren. M.a.w. beheer op afstand.