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.
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:
dany
de gebruikersnaam op het externe systeem is,pindabook.local
is de domeinnaam (of gebruik het IP-adres) van het andere systeem,uname -a
is de opdracht die we op het andere systeem willen uitvoeren vanaf het lokale systeem.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
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.
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.
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.
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
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.