Tips en Trucs 2023

Opdrachten uitvoeren op andere Linux-systemen via SSH

Als je je ooit hebt afgevraagd hoe je een opdracht of script op een systeem op afstand kunt uitvoeren vanaf je lokale systeem zelf zonder in te loggen op dat systeem op afstand, dan tonen we je dat nu.

De typische manier om een opdracht of script uit te voeren op een systeem op afstand via SSH vanaf het lokale systeem is:

ssh <gebruikersnaam@IP_Adres-of-Domein_naam> <Opdracht-of-Script>

Laten we een paar voorbeelden bekijken.

Een enkele opdracht uitvoeren op andere systemen via SSH

Laten we zeggen dat je Kernel details van jouw remote Linux systeem wilt vinden. Om dit te doen, voer je simpelweg uit:

dany@main:~$ ssh dany@pindabook.local uname -a
dany@pindabook.local's password:
Linux pindabook 6.1.0-13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.55-1 (2023-09-29) x86_64 GNU/Linux

Waarbij:

Daarbij hebben we niet echt ingelogd op het systeem op afstand, maar hebben de uname opdracht uitgevoerd op het systeem op afstand via SSH en de uitvoer weergegeven in de Terminal van het lokale systeem.

Je kunt de opdracht ook tussen aanhalingstekens zetten, zoals hieronder.

ssh dany@pindabook.local "uname -a"

Of,

ssh dany@pindabook.local 'uname -a'

Als je de standaardpoort van het SSH-protocol hebt gewijzigd, vermeld dit dan met de -p optie zoals hieronder.

ssh -p 2200 dany@pindabook.local uname -a

Meerdere opdrachten uitvoeren op hosts op afstand via SSH

We kunnen ook meerdere opdrachten uitvoeren op een host op afstand door ze tussen aanhalingstekens te zetten, zoals hieronder.

dany@main:~$ ssh dany@pindabook.local "uname -r && lsb_release -a"
dany@pindabook.local's password:
6.1.0-13-amd64
Distributor ID: Debian
Description:    Debian GNU/Linux 12 (bookworm)
Release:        12
Codename:       bookworm

Of,

dany@main:~$ ssh dany@pindabook.local "uname -r ; lsb_release -a"
dany@pindabook.local's password:
6.1.0-13-amd64
Distributor ID: Debian
Description:    Debian GNU/Linux 12 (bookworm)
Release:        12
Codename:       bookworm

Bovenstaande opdrachten tonen de Kernel versie en distributie details van een Debian 12 Bookworm systeem.

Als je geen aanhalingstekens gebruikt, wordt de eerste opdracht uitgevoerd op het systeem op afstand en wordt de tweede opdracht uitgevoerd op de lokale machine. De volledige opdracht tussen aanhalingstekens wordt op afstand verwerkt zoals de bedoeling is.

Let op het verschil tussen de && en ; operatoren tussen opdrachten:

De && operator voert de tweede opdracht alleen uit als de eerste opdracht succesvol was.

sudo apt update && sudo apt upgrade

In het bovenstaande geval zal de tweede opdracht (sudo apt-get upgrade) worden uitgevoerd als de eerste opdracht succesvol was. Anders wordt het niet uitgevoerd.

De ; operator voert de tweede opdracht altijd uit, zelfs als de eerste opdracht mislukt is.

Opdrachten uitvoeren met sudo-privileges op externe machines via SSH

Sommige opdrachten vereisen sudo privileges om uit te voeren. De volgende opdracht zal bijvoorbeeld Vim installeren op het systeem op afstand.

dany@main:~$ ssh -t dany@pindabook.local "sudo apt install vim"
dany@pindabook.local's password:
[sudo] wachtwoord voor dany: 
Pakketlijsten worden ingelezen... Klaar
Boom van vereisten wordt opgebouwd... Klaar
De statusinformatie wordt gelezen... Klaar 
De volgende extra pakketten zullen geïnstalleerd worden:
  vim-runtime
Voorgestelde pakketten:
  ctags vim-doc vim-scripts
De volgende NIEUWE pakketten zullen geïnstalleerd worden:
  vim vim-runtime
0 opgewaardeerd, 2 nieuw geïnstalleerd, 0 te verwijderen en 0 niet opgewaardeerd.
Er moeten 8.592 kB aan archieven opgehaald worden.
Na deze bewerking zal er 41,0 MB extra schijfruimte gebruikt worden.
Wilt u doorgaan? [J/n] 
Ophalen:1 http://deb.debian.org/debian bookworm/main amd64 vim-runtime all 2:9.0.1378-2 [7.025 kB]
Ophalen:2 http://deb.debian.org/debian bookworm/main amd64 vim amd64 2:9.0.1378-2 [1.567 kB]
8.592 kB opgehaald in 2s (4.714 kB/s)
Voorheen niet geselecteerd pakket vim-runtime wordt geselecteerd.
(Database wordt ingelezen ... 173836 bestanden en mappen momenteel geïnstalleerd.)
Uitpakken van .../vim-runtime_2%3a9.0.1378-2_all.deb wordt voorbereid...
'omleiding van /usr/share/vim/vim90/doc/help.txt naar /usr/share/vim/vim90/doc/help.txt.vim-tiny door vim-runtime' wordt toegevoegd
'omleiding van /usr/share/vim/vim90/doc/tags naar /usr/share/vim/vim90/doc/tags.vim-tiny door vim-runtime' wordt toegevoegd
Bezig met uitpakken van vim-runtime (2:9.0.1378-2) ...
Voorheen niet geselecteerd pakket vim wordt geselecteerd.
Uitpakken van .../vim_2%3a9.0.1378-2_amd64.deb wordt voorbereid...
Bezig met uitpakken van vim (2:9.0.1378-2) ...
Instellen van vim-runtime (2:9.0.1378-2) ...
Instellen van vim (2:9.0.1378-2) ...
update-alternatives: /usr/bin/vim.basic wordt gebruikt om in de automatische modus in /usr/bin/ex (ex) te voorzien
update-alternatives: /usr/bin/vim.basic wordt gebruikt om in de automatische modus in /usr/bin/rview (rview) te voorzien
update-alternatives: /usr/bin/vim.basic wordt gebruikt om in de automatische modus in /usr/bin/rvim (rvim) te voorzien
update-alternatives: /usr/bin/vim.basic wordt gebruikt om in de automatische modus in /usr/bin/vi (vi) te voorzien
update-alternatives: /usr/bin/vim.basic wordt gebruikt om in de automatische modus in /usr/bin/view (view) te voorzien
update-alternatives: /usr/bin/vim.basic wordt gebruikt om in de automatische modus in /usr/bin/vim (vim) te voorzien
update-alternatives: /usr/bin/vim.basic wordt gebruikt om in de automatische modus in /usr/bin/vimdiff (vimdiff) te voorzien
Bezig met afhandelen van triggers voor man-db (2.11.2-2) ...
Connection to pindabook.local closed.

Is het je opgevallen? We hebben de -t optie gebruikt in de bovenstaande SSH opdracht. We moeten deze -t optie gebruiken om pseudo-terminaltoewijzing te forceren. Dit kan gebruikt worden om willekeurige schermgebaseerde programma's uit te voeren op een machine op afstand, wat erg handig kan zijn, bijvoorbeeld bij het implementeren van menuservices en hier om het wachtwoord in te geven voor de sudo-privileges op afstand.

We hebben ook twee keer een wachtwoord ingevoerd. De eerste keer hebben we het wachtwoord van de gebruiker op afstand ingevoerd om toegang te krijgen tot het systeem op afstand via SSH vanaf het lokale systeem en het tweede wachtwoord is nodig om sudo-toestemming te geven aan de gebruiker op afstand om een applicatie (in dit geval Vim) te installeren op het systeem op afstand.

We verwijderen Vim terug van het systeem op afstand met de volgende opdracht:

dany@main:~$ ssh -t dany@pindabook.local "sudo apt remove vim && sudo apt autoremove"
dany@pindabook.local's password:
[sudo] wachtwoord voor dany: 
Pakketlijsten worden ingelezen... Klaar
Boom van vereisten wordt opgebouwd... Klaar
De statusinformatie wordt gelezen... Klaar 
Het volgende pakket is automatisch geïnstalleerd en is niet langer nodig:
  vim-runtime
Gebruik 'sudo apt autoremove' om het te verwijderen.
De volgende pakketten zullen VERWIJDERD worden:
  vim
0 opgewaardeerd, 0 nieuw geïnstalleerd, 1 te verwijderen en 0 niet opgewaardeerd.
Na deze bewerking zal er 3.738 kB schijfruimte vrijkomen.
Wilt u doorgaan? [J/n] 
(Database wordt ingelezen ... 175903 bestanden en mappen momenteel geïnstalleerd.)
vim (2:9.0.1378-2) wordt verwijderd ...
update-alternatives: /usr/bin/vim.tiny wordt gebruikt om in de automatische modus in /usr/bin/view (view) te voorzien
update-alternatives: /usr/bin/vim.tiny wordt gebruikt om in de automatische modus in /usr/bin/vi (vi) te voorzien
update-alternatives: /usr/bin/vim.tiny wordt gebruikt om in de automatische modus in /usr/bin/rview (rview) te voorzien
update-alternatives: /usr/bin/vim.tiny wordt gebruikt om in de automatische modus in /usr/bin/ex (ex) te voorzien
Pakketlijsten worden ingelezen... Klaar
Boom van vereisten wordt opgebouwd... Klaar
De statusinformatie wordt gelezen... Klaar 
De volgende pakketten zullen VERWIJDERD worden:
  vim-runtime
0 opgewaardeerd, 0 nieuw geïnstalleerd, 1 te verwijderen en 0 niet opgewaardeerd.
Na deze bewerking zal er 37,3 MB schijfruimte vrijkomen.
Wilt u doorgaan? [J/n] 
(Database wordt ingelezen ... 175893 bestanden en mappen momenteel geïnstalleerd.)
vim-runtime (2:9.0.1378-2) wordt verwijderd ...
'omleiding van /usr/share/vim/vim90/doc/help.txt naar /usr/share/vim/vim90/doc/help.txt.vim-tiny door vim-runtime' wordt verwijderd
'omleiding van /usr/share/vim/vim90/doc/tags naar /usr/share/vim/vim90/doc/tags.vim-tiny door vim-runtime' wordt verwijderd
Bezig met afhandelen van triggers voor man-db (2.11.2-2) ...
Connection to pindabook.local closed.

Lokale scripts uitvoeren op externe systemen via SSH

Laten we een eenvoudig script maken op ons lokale systeem om alle beschikbare informatie weer te geven over de distributienaam van het externe systeem, pakketbeheer en basisgegevens, enzovoort. Start een editor (bijvoorbeeld nano) met de naam van het script (systeeminformatie.sh).

dany@main:~$ nano systeeminformatie.sh

Voeg de volgende regels toe:

#!/bin/bash
# Systeeminformatie weergeven
#----------------------------
echo /etc/*_ver* /etc/*-rel*; cat /etc/*_ver* /etc/*-rel*

Druk op de sneltoets Ctrl+s en daarna Ctrl+x om het script op te slaan en de nano editor af te sluiten.

Voer dit script nu uit op het externe systeem via SSH met behulp van de opdracht:

dany@main:~$ ssh dany@pindabook.local 'bash -s' < systeeminformatie.sh 
dany@pindabook.local's password:
/etc/debian_version /etc/os-release
12.2
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

Als je geen bash -s opgeeft in de bovenstaande opdracht, krijg je de details van het systeem op afstand, maar wordt er geen Pseudo-terminal toegewezen.

Uitvoer van opdrachten opslaan van externe host naar lokale host

Dit kan handig zijn als je de uitvoer van een opdracht dat je uitvoert op het externe systeem via SSH wilt delen met je ondersteuningsteam of collega.

De volgende opdracht zal df -h uitvoeren op jouw systeem op afstand via SSH en de uitvoer opslaan in schijfgebruik.txt bestand op het lokale systeem.

dany@main:~$ ssh dany@pindabook.local df -h > schijfgebruik.txt
dany@pindabook.local's password:

Je kunt dan de details van het schijfgebruik analyseren door het bestand schijfgebruik.txt te bekijken met de opdracht cat of tekstviewers.

dany@main:~$ cat schijfgebruik.txt 
Bestandssysteem Grootte Gebruikt Besch Geb% Aangekoppeld op
udev               3,9G        0  3,9G   0% /dev
tmpfs              786M     1,6M  784M   1% /run
/dev/sda4           79G      47G   28G  64% /
tmpfs              3,9G     1,2M  3,9G   1% /dev/shm
tmpfs              5,0M      12K  5,0M   1% /run/lock
/dev/sda2          256M      67M  190M  26% /boot/efi
/dev/sda7          147G      36G  104G  26% /usr/home/Documents
tmpfs              786M      64K  786M   1% /run/user/1000

Lokaal testen

Je kunt het uitvoeren van opdrachten op een ander apparaat ook uitproberen en testen op één systeem. M.a.w. je gebruikt dezelfde computer zowel als lokaal apparaat en als apparaat op afstand. Zie onderstaande afbeelding.

SSH