SSH: verschil tussen versies
(Nieuwe pagina aangemaakt met ' =SSH= '''File-sharing en synchronisatie via SSH''' in je thuisnetwerk '''SSH''' staat voor secure shell. Het is een netwerkprotocol dat gebruik maakt van een b...') |
(→Firewall) |
||
(82 tussenliggende versies door 2 gebruikers niet weergegeven) | |||
Regel 1: | Regel 1: | ||
− | |||
− | |||
− | |||
− | |||
'''File-sharing en synchronisatie via SSH''' in je thuisnetwerk | '''File-sharing en synchronisatie via SSH''' in je thuisnetwerk | ||
− | |||
'''SSH''' staat voor secure shell. Het is een netwerkprotocol dat gebruik maakt van een beveiligde verbinding. Elke uitwisseling van gegevens tussen twee computers is versleuteld. | '''SSH''' staat voor secure shell. Het is een netwerkprotocol dat gebruik maakt van een beveiligde verbinding. Elke uitwisseling van gegevens tussen twee computers is versleuteld. | ||
− | '''SSH''' is gebaseerd op het client server model. Een server verleent toegang aan een client. | + | '''SSH''' is gebaseerd op het client server model. Een [[server]] verleent toegang aan een client (gebruiker). |
− | Met ssh kun je onder meer veilig bestanden delen en overzetten via '''SFTP'''. En dat is het onderwerp van dit artikel. | + | Met ssh kun je onder meer veilig bestanden delen en overzetten via [[Afkortingen#S|'''SFTP''']]. En dat is het onderwerp van dit artikel. |
− | + | ==Inleiding== | |
+ | In dit artikel leg ik uit <br /> | ||
+ | * hoe je ssh moet opzetten, | ||
+ | * hoe je bestanden op de andere computer kan gebruiken vanuit je bestandsbeheerder (Nemo), | ||
+ | * hoe je een snelkoppeling naar een map op de andere computer op je bureaublad zet, | ||
+ | * hoe je bestanden op de server vanaf een smartphone of tablet kan gebruiken | ||
+ | * en hoe je hele mappen synchroniseert tussen twee computers. | ||
− | + | Ik begin met een korte uitleg over het opzetten van je netwerk: apparatuur en bekabeling, <br /> | |
− | + | dan iets over de [[firewall]] en ip adressen, <br /> | |
− | + | dan het installeren van de software voor ssh, <br /> | |
− | |||
− | |||
− | |||
− | |||
− | Ik begin met een korte uitleg over het opzetten van je netwerk: apparatuur en bekabeling, | ||
− | dan iets over de firewall en ip adressen, | ||
− | dan het installeren van de software voor ssh, | ||
daarna komt het delen en synchroniseren aan de beurt. | daarna komt het delen en synchroniseren aan de beurt. | ||
Ik zal ook een aantal links geven waar ik mijn wijsheid vandaan heb gehaald. | Ik zal ook een aantal links geven waar ik mijn wijsheid vandaan heb gehaald. | ||
+ | ==Netwerk== | ||
+ | Om te beginnen kan het wenselijk zijn om je [[Netwerken|netwerk]] met een draadloze router uit te breiden omdat er steeds meer apparaten bijkomen. Voor het uitbreiden van je netwerk is een switch het meest aangewezen apparaat qua kostprijs en eenvoud, maar voor draadloze apparaten of om het bereik van je draadloze netwerk uit te breiden heb je toch wel een router nodig. | ||
+ | Op WikiHow staat een heel goed artikel<ref>[https://www.wikihow.com/Cascade-Routers How to Cascade Routers]</ref> waarin stap voor stap wordt uitgelegd hoe je een router aan je netwerk moet toevoegen zodat de computers en mobiele apparatuur allemaal voor elkaar zichtbaar blijven. | ||
+ | |||
+ | De clou is dat je op de hulp router eerst de [[Afkortingen#D|dhcp]] server uitschakelt en vervolgens niet de [[Afkortingen#W|wan]] poort maar een [[Afkortingen#L|lan]] poort gebruikt om naar de hoofdrouter te verbinden. Als je de dhcp server niet uitschakelt interfereert die met die van de hoofdrouter. Dan gaat je net op slot en kan je helemaal overnieuw beginnen. | ||
+ | |||
+ | ==Firewall== | ||
+ | Om ssh op een computer te kunnen gebruiken moet je er voor zorgen dat de clients toegang hebben tot de computer waarop de ssh server draait. | ||
+ | Dat betekent dat je de firewall van de ssh server moet aanpassen. Een heel handig hulpmiddel hiervoor is '''UFW'''<ref>[https://www.digitalocean.com/community/tutorials/how-to-setup-a-firewall-with-ufw-on-an-ubuntu-and-debian-cloud-server How To Setup a Firewall with UFW on an Ubuntu and Debian Cloud Server]</ref> | ||
− | + | Met '''UFW''' is het heel eenvoudig om individuele [[Afkortingen#I|ip]] adressen van de lokale apparatuur toegang te geven tot de server. Dat betekent wel dat je dan statische ip adressen in je netwerk moet hebben. Die voer je handmatig in je apparaten in. Je gebruikt dus geen dhcp. De gateway is het adres van je router. In de router doe je IP&MAC binding voor extra veiligheid. Maak een tabel in een tekstdocument of spreadsheet met apparaat, mac adres, ip adres en locatie. Die kun je bijna 1 op 1 in je router zetten bij IP&MAC binding. Sommige laptops hebben kabel en wifi. Dan kunnen ze aparte mac adressen hebben voor kabel en wifi. Die moeten verschillende ip adressen hebben.<br /> | |
− | + | Je kunt op de server een client met adres 192.168.1.183 toegang geven via de regel | |
− | + | <pre> | |
− | + | sudo ufw allow from 192.168.1.183 | |
− | + | </pre> | |
− | + | Meer is het niet. | |
+ | Het is sowieso aan te raden om [[Afkortingen#I|statische adressen]] in je netwerk te gebruiken omdat het verbinding maken met de server daardoor eenvoudiger wordt. Dat gaat met behulp van het configuratiebestand wat verderop wordt uitgelegd. | ||
− | + | Alle apparaten die toegang moeten hebben tot je ssh server moeten door de firewall worden doorgelaten: computers, laptops, smartphones en tablets. Dus voor elk apparaat moet je een regel aanmaken. Je kunt beter niet een reeks van ip-adressen toegang geven want dan zet je de firewall onnodig verder open. Je hoeft het maar één keer te doen. | |
− | |||
− | |||
− | |||
− | |||
− | + | Als alternatief kun je voor ssh poort 22 openzetten. Dat doe je via de regel | |
− | + | <pre> | |
− | + | sudo ufw allow ssh | |
− | + | </pre> | |
+ | Maar dan staat de firewall open voor ''alle'' apparaten die via ssh verbinding willen maken, ook van de buitenwereld buiten je lokale netwerk. Want dan wordt er niet meer op het ip-adres gecontroleerd. <br /> | ||
+ | Dan is de firewall van je router de last line of defense geworden. Als je geen IP&MAC binding hebt.<br /> | ||
+ | Daarom gebruik ik dit niet in mijn eigen netwerk. | ||
− | + | Je kunt het aantal pogingen beperken waarmee een ip-adres een nieuwe verbinding tot stand probeert te brengen. Als een ip-adres meer dan 10 keer in 30 seconden probeert te verbinden zullen alle volgende pogingen worden genegeerd. Dit doe je door de volgende regel toe te voegen aan de firewall: | |
+ | <pre> | ||
+ | sudo ufw limit ssh | ||
+ | </pre> | ||
+ | Dit verbetert de beveiliging van de server. | ||
− | + | Om te zien welke apparaten er op je LAN zijn aangesloten kun je de opdracht '''arp-scan'''<ref>[https://linux.die.net/man/1/arp-scan arp-scan]</ref> gebruiken. Voor het uitvoeren van die opdracht heb je root bevoegdheden nodig dus je moet de opdracht door sudo vooraf laten gaan en na enter je wachtwoord invoeren. De uitvoer ziet er dan ongeveer zo uit: | |
+ | <pre> | ||
+ | mogenblue@brutus ~ $ sudo arp-scan --localnet | ||
+ | Interface: eno1, type: EN10MB, MAC: 24:3a:d5:0b:d7:d3, IPv4: 192.168.1.53 | ||
+ | Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan) | ||
+ | 192.168.1.1 40:64:a7:fe:1b:b9 TP-LINK TECHNOLOGIES CO.,LTD. | ||
+ | 192.168.1.62 5c:dd:2b:7f:a4:e4 ASUSTek COMPUTER INC. | ||
+ | 192.168.1.63 5c:ab:d5:3b:c9:eb Motorola Mobility LLC | ||
− | + | 3 packets received by filter, 0 packets dropped by kernel | |
− | + | Ending arp-scan 1.9.7: 256 hosts scanned in 1.963 seconds (130.41 hosts/sec). 3 responded | |
− | + | </pre> | |
− | |||
+ | == SSH server == | ||
− | = | + | ===Installatie=== |
− | Om SSH te gebruiken moet het softwarepakket '''OpenSSH-server''' worden geïnstalleerd op de machine die als server gaat dienen. Dit kan gewoon vanuit programmabeheer worden geïnstalleerd.<br /> | + | Om SSH te gebruiken moet het softwarepakket '''OpenSSH-server''' worden geïnstalleerd op de machine die als server gaat dienen. Dit kan gewoon vanuit [[programmabeheer]] worden geïnstalleerd.<br /> |
− | Zodra de installatie voltooid is wordt de ssh service automatisch gestart. Je kunt dit in een terminal controleren met de opdracht< | + | Zodra de installatie voltooid is wordt de ssh service automatisch gestart. Je kunt dit in een terminal controleren met de opdracht |
− | + | <pre> | |
− | of< | + | sudo systemctl status ssh |
− | + | </pre> | |
+ | of | ||
+ | <pre> | ||
+ | sudo service ssh status | ||
+ | </pre> | ||
− | de uitvoer ziet er dan ongeveer zo uit: | + | de uitvoer ziet er dan ongeveer zo uit: |
− | < | + | <syntaxhighlight lang="bash"> |
− | ● ssh.service - OpenBSD Secure Shell server | + | ● ssh.service - OpenBSD Secure Shell server |
− | + | Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled) | |
− | + | Active: active (running) since Thu 2021-02-18 14:54:30 CET; 4 days ago | |
− | + | Docs: man:sshd(8) | |
− | + | man:sshd_config(5) | |
− | + | Process: 202638 ExecReload=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS) | |
− | + | Process: 202639 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS) | |
− | + | Main PID: 82034 (sshd) | |
− | + | Tasks: 1 (limit: 18928) | |
− | + | Memory: 5.5M | |
− | + | CGroup: /system.slice/ssh.service | |
− | + | └─82034 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups | |
− | </ | + | </syntaxhighlight> |
Dat is het. Je kunt nu verbinding maken met de ssh server vanaf elke andere computer in je netwerk vooropgesteld dat de firewall van de server de ssh service of ip-adressen van die computers toelaat. | Dat is het. Je kunt nu verbinding maken met de ssh server vanaf elke andere computer in je netwerk vooropgesteld dat de firewall van de server de ssh service of ip-adressen van die computers toelaat. | ||
− | |||
===Verbinding maken met de ssh server=== | ===Verbinding maken met de ssh server=== | ||
− | Om verbinding te maken met de ssh server heb je drie gegevens nodig. De username waarmee je op de server computer bekend bent, je wachtwoord en het ip adres van ssh server. In een terminal kun je dan verbinding maken met het volgende commando< | + | Om verbinding te maken met de ssh server heb je drie gegevens nodig. |
− | + | # De username (gebruikersnaam) waarmee je op de server computer bekend bent, | |
+ | # je wachtwoord | ||
+ | # en het ip adres van ssh server. <br /> | ||
+ | In een terminal kun je dan verbinding maken met het volgende commando | ||
+ | <pre> | ||
+ | ssh username@server-ip-adress | ||
+ | </pre> | ||
Er wordt dan om het wachtwoord gevraagd. Type dat in en druk op enter.<br /> | Er wordt dan om het wachtwoord gevraagd. Type dat in en druk op enter.<br /> | ||
− | Als je voor de eerste keer verbinding maakt wordt er gevraagd of je door wil gaan met verbinding maken. Antwoord met ja en druk op enter. Deze vraag verschijnt alleen de eerste keer omdat de server dan nog niet bekend is op je lokale machine. Een ECDSA vingerafdruk wordt nu toegevoegd en je bent verbonden met de ssh server. | + | Als je voor de eerste keer verbinding maakt wordt er gevraagd of je door wil gaan met verbinding maken. Antwoord met ja en druk op enter. Deze vraag verschijnt alleen de eerste keer omdat de server dan nog niet bekend is op je lokale machine. Een ECDSA vingerafdruk wordt nu toegevoegd en je bent verbonden met de ssh server. <br /> |
− | Om de verbinding te verbreken type je exit in of sluit de terminal. | + | Om de verbinding te verbreken type je exit in of sluit de terminal. |
− | + | Je kunt de bestanden op de server ook in je [[Bestandsbeheer|bestandsbeheerder]] (Nemo) benaderen. Dat gaat als volgt.<br /> | |
− | Je kunt de bestanden op de server ook in je bestandsbeheerder (Nemo) benaderen. Dat gaat als volgt. | + | :Open de bestandsbeheerder |
− | Open de bestandsbeheerder | + | :Klik in de menubalk op bestand |
− | Klik in de menubalk op bestand | + | :Selecteer Verbinding maken met server... |
− | Selecteer Verbinding maken met server... | + | :Vul in het venster bij server het ip-adres van de ssh server in |
− | Vul in het venster bij server het ip-adres van de ssh server in | + | :Selecteer bij type SSH |
− | Selecteer bij type SSH | + | :Bij de gebruikersgegevens moet je je username en het wachtwoord invullen |
− | Bij de gebruikersgegevens moet je je username en het wachtwoord invullen | + | :Klik dan rechtsonder op de knop verbinden |
− | Klik dan rechtsonder op de knop verbinden | ||
Vervolgens verschijnt de mappenlijst van de server in beeld.<br /> | Vervolgens verschijnt de mappenlijst van de server in beeld.<br /> | ||
Je kunt nu door alle mappen op de ssh server bladeren en van en naar de server kopiëren en verplaatsen van mappen en bestanden.<br /> | Je kunt nu door alle mappen op de ssh server bladeren en van en naar de server kopiëren en verplaatsen van mappen en bestanden.<br /> | ||
Dit is file-sharing via ssh op 115 MB/s. | Dit is file-sharing via ssh op 115 MB/s. | ||
− | + | ===Vereenvoudigde verbinding=== | |
− | === | ||
Het maken van verbinding kan op twee manieren worden vereenvoudigd.<br /> | Het maken van verbinding kan op twee manieren worden vereenvoudigd.<br /> | ||
− | Ten eerste kan door het uitwisselen van een digitaal sleutelpaar zonder wachtwoord worden ingelogd.<br /> | + | *Ten eerste kan door het uitwisselen van een digitaal sleutelpaar zonder wachtwoord worden ingelogd.<br /> |
− | Ten tweede kan door een configuratie bestand het ip adres en de username aan een naam worden gekoppeld zodat je alleen nog die naam nodig hebt voor die verbinding.<br /> | + | *Ten tweede kan door een configuratie bestand het ip adres en de username aan een naam worden gekoppeld zodat je alleen nog die naam nodig hebt voor die verbinding.<br /> |
Het combineren van beide methoden maakt een verbinding vrijwel transparant. | Het combineren van beide methoden maakt een verbinding vrijwel transparant. | ||
− | |||
===Inloggen zonder wachtwoord=== | ===Inloggen zonder wachtwoord=== | ||
Om met SSH zonder wachtwoord te kunnen inloggen moet je een openbare authenticatie sleutel aanmaken en deze toevoegen aan het bestand '''~/.ssh/authorized_keys''' van de ssh server.<br /> | Om met SSH zonder wachtwoord te kunnen inloggen moet je een openbare authenticatie sleutel aanmaken en deze toevoegen aan het bestand '''~/.ssh/authorized_keys''' van de ssh server.<br /> | ||
− | Dat gaat in drie stappen: controleer of er al een ssh sleutelpaar bestaat, maak een nieuw ssh sleutelpaar aan, kopieer de openbare sleutel naar de server. | + | Dat gaat in drie stappen: |
+ | #controleer of er al een ssh sleutelpaar bestaat, | ||
+ | #maak een nieuw ssh sleutelpaar aan, | ||
+ | #kopieer de openbare sleutel naar de server. | ||
− | Je moet eerst controleren of je al een ssh sleutel op je machine hebt want je hoeft hem niet te overschrijven. Dat kun je controleren | + | '''1)''' Je moet eerst controleren of je al een ssh sleutel op je machine hebt want je hoeft hem niet te overschrijven. Dat kun je als volgt controleren:<br /> |
− | + | Open de bestandsbeheerder<br /> | |
+ | ga naar de [[Home Map|home map]], als je daar nog niet in staat<br /> | ||
+ | rechts klik voor het context menu<br /> | ||
+ | kies In terminal openen<br /> | ||
+ | Geef dan de opdracht | ||
+ | <pre> | ||
+ | ls -al ~/.ssh/id_*.pu | ||
+ | </pre> | ||
Als je geen sleutels hebt krijg je een melding <br /> | Als je geen sleutels hebt krijg je een melding <br /> | ||
− | No matches found | + | ;No matches found |
− | of | + | of <br /> |
;No such file or directory. | ;No such file or directory. | ||
Als je wel sleutels hebt kun je de volgende stap overslaan. | Als je wel sleutels hebt kun je de volgende stap overslaan. | ||
− | Met de volgende opdracht kun je een nieuw sleutelpaar aanmaken van 4096 bit en je email-adres als commentaar:< | + | '''2)''' Met de volgende opdracht kun je een nieuw sleutelpaar aanmaken van 4096 bit en je email-adres als commentaar: |
− | + | <pre> | |
+ | ssh-keygen -t rsa -b 4096 -C "jouw-email@jouw-provider.nl" | ||
+ | </pre> | ||
Druk op Enter voor de standaard locatie en bestandnaam.<br /> | Druk op Enter voor de standaard locatie en bestandnaam.<br /> | ||
Vervolgens wordt je gevraagd om een secure passphrase in te voeren. Dat geeft een extra beveiliging. Die kun je gewoon leeg laten en met Enter er aan voorbij gaan.<br /> | Vervolgens wordt je gevraagd om een secure passphrase in te voeren. Dat geeft een extra beveiliging. Die kun je gewoon leeg laten en met Enter er aan voorbij gaan.<br /> | ||
− | Controleer of je ssh sleutels zijn aangemaakt met< | + | Controleer of je ssh sleutels zijn aangemaakt met |
− | + | <pre> | |
+ | ls ~/.ssh/id_* | ||
+ | </pre> | ||
De output ziet er ongeveer zo uit:<br /> | De output ziet er ongeveer zo uit:<br /> | ||
;/home/mogenblue/.ssh/id_rsa /home/mogenblue/.ssh/id_rsa.pub | ;/home/mogenblue/.ssh/id_rsa /home/mogenblue/.ssh/id_rsa.pub | ||
In plaats van mogenblue zie je dan je eigen username. | In plaats van mogenblue zie je dan je eigen username. | ||
− | Om de sleutels te kunnen gebruiken moet je de openbare sleutel naar de server kopiëren. De makkelijkste manier daarvoor is met de ssh-copy-id opdracht< | + | Let erop dat je in je [[Home Map|home directory]] staat want met '''~/.ssh/.....''' kijkt het systeem naar de verborgen map '''.ssh''' vanaf de huidige map. De .ssh directory staat direct onder je home map, dus dan moet je daar staan om het systeem de map te laten vinden. |
− | + | ||
+ | '''3)''' Om de sleutels te kunnen gebruiken moet je de openbare sleutel naar de server kopiëren. De makkelijkste manier daarvoor is met de ssh-copy-id opdracht | ||
+ | <pre> | ||
+ | ssh-copy-id username@server_ip_address | ||
+ | </pre> | ||
Voor username moet je je eigen username gebruiken. Bij ip-adress vul je het ip adres van de ssh server in. | Voor username moet je je eigen username gebruiken. Bij ip-adress vul je het ip adres van de ssh server in. | ||
Er wordt dan om het wachtwoord gevraagd. Type dat in en druk op enter.<br /> | Er wordt dan om het wachtwoord gevraagd. Type dat in en druk op enter.<br /> | ||
Regel 139: | Regel 177: | ||
Je kunt nu inloggen zonder je wachtwoord te hoeven invoeren. | Je kunt nu inloggen zonder je wachtwoord te hoeven invoeren. | ||
− | In een terminal:< | + | In een terminal: |
− | + | <pre> | |
+ | ssh username@server-ip-adress | ||
+ | </pre> | ||
en vul je eigen username en het ip-adres van de server in. | en vul je eigen username en het ip-adres van de server in. | ||
In de bestandsbeheerder hoef je nu ook niet meer je wachtwoord in te voeren als je verbinding wilt maken. | In de bestandsbeheerder hoef je nu ook niet meer je wachtwoord in te voeren als je verbinding wilt maken. | ||
− | |||
===Het user SSH config bestand=== | ===Het user SSH config bestand=== | ||
− | De tweede manier om het verbinden met de server te vereenvoudigen is door een naam aan de verbinding te geven en daar de noodzakelijke verbindingsgegevens aan te koppelen zoals ip-adres en username. Dat zet je dan in een ssh configuratiebestand onder je usermap. Precies gezegd in het ~/.ssh/config bestand. | + | De tweede manier om het verbinden met de server te vereenvoudigen is door een naam aan de verbinding te geven en daar de noodzakelijke verbindingsgegevens aan te koppelen zoals ip-adres en username. Dat zet je dan in een ssh configuratiebestand onder je usermap. Precies gezegd in het '''~/.ssh/config''' bestand.<br /> |
Dus voor user mogenblue is het volledige pad<br /> | Dus voor user mogenblue is het volledige pad<br /> | ||
;/home/mogenblue/.ssh/config | ;/home/mogenblue/.ssh/config | ||
− | Het staat | + | Het staat in een verborgen map dus je moet in je bestandsbeheerder de verborgen mappen en bestanden laten tonen. |
− | In dat bestand zet je bijvoorbeeld de volgende regels:< | + | In dat bestand zet je bijvoorbeeld de volgende regels: |
+ | <pre> | ||
Host popeye | Host popeye | ||
− | + | HostName 192.168.1.17 | |
− | + | Port 22 | |
− | + | User mogenblue | |
− | Hiermee heb je voor de host met de naam popeye vastgelegd wat het ip-adres van de server is, welke poort wordt gebruikt en wat de username is die je op die server gebruikt. Nu kun je in een terminal met die host verbinding maken met de regel< | + | </pre> |
− | + | Hiermee heb je voor de host met de naam popeye vastgelegd wat het ip-adres van de server is, welke poort wordt gebruikt en wat de username is die je op die server gebruikt. Nu kun je in een terminal met die host verbinding maken met de regel | |
+ | <pre> | ||
+ | ssh popeye | ||
+ | </pre> | ||
meer niet. Zo simpel is het geworden. | meer niet. Zo simpel is het geworden. | ||
Er zijn nog meer mogelijkheden met het ssh config bestand maar om met een eenvoudig thuisnetwerk te beginnen met 1 of 2 servers is dit wel genoeg. Om het simpel te houden. | Er zijn nog meer mogelijkheden met het ssh config bestand maar om met een eenvoudig thuisnetwerk te beginnen met 1 of 2 servers is dit wel genoeg. Om het simpel te houden. | ||
− | + | == Verbindingen == | |
− | =Verbindingen= | + | ===Verbinden in de bestandsbeheerder=== |
− | + | Nu kun je in je bestandsbeheerder eenvoudiger verbinding maken.<br /> | |
− | ===Verbinden in bestandsbeheerder=== | + | Open de bestandsbeheerder<br /> |
− | Nu kun je in je bestandsbeheerder eenvoudiger verbinding maken. | + | Klik in de menubalk op bestand<br /> |
− | Open de bestandsbeheerder | + | Selecteer Verbinding maken met server...<br /> |
− | Klik in de menubalk op bestand | + | Vul in het venster bij server de naam van je verbinding in (popeye)<br /> |
− | Selecteer Verbinding maken met server... | + | Selecteer bij type SSH<br /> |
− | Vul in het venster bij server de naam van je verbinding in (popeye) | + | Klik dan direct rechtsonder op de knop verbinden<br /> |
− | Selecteer bij type SSH | + | Vervolgens verschijnt de mappenlijst van de server in beeld en kun je weer navigeren en kopiëren en plakken naar en van de server.<br /> |
− | Klik dan direct rechtsonder op de knop verbinden | ||
− | Vervolgens verschijnt de mappenlijst van de server in beeld en kun je weer navigeren en kopiëren en plakken naar en van de server. | ||
Omdat je kunt inloggen zonder wachtwoord hoef je dat niet meer in te vullen. En het ip-adres en de username worden in het configuratiebestand opgezocht. | Omdat je kunt inloggen zonder wachtwoord hoef je dat niet meer in te vullen. En het ip-adres en de username worden in het configuratiebestand opgezocht. | ||
− | Je kan nu ook in je bestandsbeheerder een bladwijzer aanmaken voor je map op de ssh server. Die verschijnt in de zijbalk aan de linkerkant. De verbinding met de server wordt om | + | Je kan nu ook in je bestandsbeheerder een bladwijzer aanmaken voor je map op de ssh server. Die verschijnt in de zijbalk aan de linkerkant. De verbinding met de server wordt om veiligheidsredenen automatisch na een bepaalde tijd verbroken. Maar je kunt gewoon op de bladwijzer klikken en dan wordt de verbinding automatisch hersteld. |
− | Makkelijker kan | + | Makkelijker kan bijna niet. Of je moet ook met [[SSHFS]] werken. |
− | |||
===Snelkoppeling naar de ssh server op je buroblad=== | ===Snelkoppeling naar de ssh server op je buroblad=== | ||
− | Je kunt normaal gesproken geen snelkoppeling van een netwerk map in een lokale map of op je buroblad zetten. Dat gaat via een omweg. | + | Je kunt normaal gesproken geen snelkoppeling van een netwerk map in een lokale map of op je buroblad zetten. Dat gaat via een omweg.<br /> |
Je moet eerst een starter voor bestandsbeheer op je buroblad zetten en dan die starter het netwerkadres van de map op de server geven om mee te openen. | Je moet eerst een starter voor bestandsbeheer op je buroblad zetten en dan die starter het netwerkadres van de map op de server geven om mee te openen. | ||
− | Dat gaat zo: | + | Dat gaat zo:<br /> |
− | Klik op de menuknop linksonder | + | Klik op de menuknop linksonder<br /> |
− | Navigeer naar hulpmiddelen -> bestanden | + | Navigeer naar hulpmiddelen -> bestanden<br /> |
− | Rechtsklik en kies voor Toevoegen aan bureaublad | + | Rechtsklik en kies voor Toevoegen aan bureaublad<br /> |
− | Open de bestandsbeheerder door op het net toegevoegde icoon te klikken | + | Open de bestandsbeheerder door op het net toegevoegde icoon te klikken<br /> |
− | Ga naar de home map op de ssh server | + | Ga naar de home map op de ssh server<br /> |
− | Rechtsklik in het venster met de mappenlijst en kies voor In terminal openen | + | Rechtsklik in het venster met de mappenlijst en kies voor In terminal openen<br /> |
− | De prompt ziet er ongeveer uit als | + | De prompt ziet er ongeveer uit als<br /> |
− | mogenblue@ | + | <syntaxhighlight lang="bash"> |
− | Het gedeelte dat de remote host aangeeft moet je selecteren en kopieren, dus | + | mogenblue@brutus /run/user/1000/gvfs/sftp:host=popeye/home/mogenblue $ |
+ | </syntaxhighlight> | ||
+ | Het gedeelte dat de remote host aangeeft moet je selecteren en kopieren, dus<br /> | ||
+ | <syntaxhighlight lang="bash"> | ||
/run/user/1000/gvfs/sftp:host=popeye/home/mogenblue | /run/user/1000/gvfs/sftp:host=popeye/home/mogenblue | ||
− | moet je selecteren | + | </syntaxhighlight> |
− | en via de menubalk kies je voor Bewerken -> kopiëren om dat gedeelte te kopiëren | + | moet je selecteren<br /> |
− | Sluit de terminal | + | en via de menubalk kies je voor Bewerken -> kopiëren om dat gedeelte te kopiëren<br /> |
− | Sluit de bestandsbeheerder | + | Sluit de terminal<br /> |
− | Rechtklik op het nieuw aangemaakte icoon en kies voor Eigenschappen | + | Sluit de bestandsbeheerder<br /> |
− | Bij opdracht staat | + | Rechtklik op het nieuw aangemaakte icoon en kies voor Eigenschappen<br /> |
− | Nemo %U | + | Bij opdracht staat<br /> |
− | Daarachter plak je het remote adres tussen dubbele aanhalingstekens: | + | ;Nemo %U |
+ | Daarachter plak je het remote adres tussen dubbele aanhalingstekens:<br /> | ||
+ | <syntaxhighlight lang="bash"> | ||
Nemo %U "/run/user/1000/gvfs/sftp:host=popeye/home/mogenblue" | Nemo %U "/run/user/1000/gvfs/sftp:host=popeye/home/mogenblue" | ||
− | Sluit het Eigenschappen venster | + | </syntaxhighlight> |
− | Hernoem het icoon naar ssh popeye home | + | Sluit het Eigenschappen venster<br /> |
− | Kies voor popeye de naam van je eigen remote machine | + | Hernoem het icoon naar ssh popeye home<br /> |
− | Klik op het icoon om te openen | + | Kies voor popeye de naam van je eigen remote machine<br /> |
− | Je staat nu in de home map op je remote machine, via ssh. | + | Klik op het icoon om te openen<br /> |
+ | Je staat nu in de home map op je remote machine, via ssh.<br /> | ||
Klaar. | Klaar. | ||
− | |||
===Bestanden benaderen via ssh op je smartphone of tablet in Android=== | ===Bestanden benaderen via ssh op je smartphone of tablet in Android=== | ||
− | Op de smartphone en tablet is CX explorer een handige app voor bestandsbeheer. Zowel voor je lokale bestanden als via het netwerk. Het biedt een reeks aan verbindingsmogelijkheden via het netwerk. | + | Op de smartphone en tablet is '''CX explorer''' een handige app voor bestandsbeheer. Zowel voor je lokale bestanden als via het draadloze wifi netwerk. Het biedt een reeks aan verbindingsmogelijkheden via het netwerk. |
− | Voor het delen van bestanden via SSH heb je in CX | + | Voor het delen van bestanden via SSH heb je in CX Explorer een SFTP verbinding nodig. |
− | Om zo'n verbinding toe te voegen doe je het volgende: | + | Om zo'n verbinding toe te voegen doe je het volgende:<br /> |
− | In CX Explorer klik je op de Tab Netwerk | + | In CX Explorer klik je op de Tab Netwerk<br /> |
− | Klik op de cirkel rechtsonder met een + om een verbinding toe te voegen | + | Klik op de cirkel rechtsonder met een + om een verbinding toe te voegen<br /> |
− | Selecteer de tab Remote | + | Selecteer de tab Remote<br /> |
− | Selecteer SFTP | + | Selecteer SFTP<br /> |
− | Vul de gegevens in: ip-adres, username en wachtwoord. | + | Vul de gegevens in: ip-adres, username en wachtwoord.<br /> |
− | Druk op ok. | + | Druk op ok.<br /> |
− | De mappenlijst van de server verschijnt in beeld. | + | De mappenlijst van de server verschijnt in beeld.<br /> |
Klaar. | Klaar. | ||
+ | Je kunt nu vanaf je smartphone browsen door de mappen op de server. Je kunt ook afbeeldingen op de server bekijken en muziek en video bestanden van de server op je smartphone afspelen. En je kunt bestanden up- en downloaden. | ||
+ | |||
+ | ==Test online status SSH server== | ||
+ | Om op een client te controleren of de ssh server online is kan de '''nmap'''<ref>[https://askubuntu.com/questions/925754/checking-ftp-server-online-from-bash-script Checking FTP server online from Bash script?]</ref><ref>[https://www.tecmint.com/nmap-command-examples/ 29 Practical Examples of Nmap Commands for Linux System/Network Administrators]</ref> opdracht worden gebruikt. | ||
+ | |||
+ | Als het ip-adres van de server bijvoorbeeld 192.168.1.073 is en de server is online dan ziet de uitvoer in een terminal er ongeveer zo uit: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | mogenblue@Brutus ~ $ nmap 192.168.1.073 -p 22 --open --host-timeout 3 | ||
+ | Starting Nmap 7.80 ( https://nmap.org ) at 2021-04-20 10:19 CEST | ||
+ | Nmap scan report for 192.168.1.073 | ||
+ | Host is up (0.00050s latency). | ||
+ | |||
+ | PORT STATE SERVICE | ||
+ | 22/tcp open ssh | ||
+ | |||
+ | Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Als de server niet online is, of een willekeurig ander ip wordt gebruikt, ziet het er zo uit: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | mogenblue@Brutus ~ $ nmap 192.168.1.078 -p 22 --open --host-timeout 3 | ||
+ | Starting Nmap 7.80 ( https://nmap.org ) at 2021-04-20 10:20 CEST | ||
+ | Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn | ||
+ | Nmap done: 1 IP address (0 hosts up) scanned in 3.03 seconds | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | SSH werkt gewoonlijk op poort 22. Daarom wordt bij de '''-p''' optie deze waarde meegegeven. Daardoor wordt alleen op die poort gescand.<br /> | ||
+ | Door de optie '''--host-timeout''' zal de opdracht na 3 seconden stoppen met wachten op respons. | ||
+ | |||
+ | Met het volgende script kan de status in een terminal worden gecontroleerd. Het heet '''test-ssh-status-t.sh''' en dit staat er in: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | #!/bin/bash | ||
+ | |||
+ | # test de status van de ssh host | ||
+ | |||
+ | Host='192.168.1.073' | ||
+ | |||
+ | # ssh via port 22 | ||
+ | Port=22 | ||
+ | TimeOutSeconden=3 | ||
+ | |||
+ | echo . | ||
+ | echo . | ||
+ | echo . | ||
+ | echo . | ||
+ | |||
+ | nmap $Host -p$Port --open --host-timeout $TimeOutSeconden | ||
+ | </syntaxhighlight> | ||
+ | Je hoeft alleen het ip-adres van de ssh-server in te vullen. | ||
+ | |||
+ | Als alternatief kun je ook een script gebruiken wat een melding op het scherm geeft. Dit heet '''test-ssh-status-m.sh''': | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | #!/bin/bash | ||
+ | |||
+ | # test de status van de ssh host | ||
+ | |||
+ | Host='192.168.1.073' | ||
+ | |||
+ | # ssh via port 22 | ||
+ | Port=22 | ||
+ | TimeOutSeconden=3 | ||
+ | Service='SSH' | ||
+ | |||
+ | echo . | ||
+ | echo . | ||
+ | echo . | ||
+ | echo . | ||
+ | |||
+ | Status=$(nmap $Host -p $Port --open --host-timeout $TimeOutSeconden | grep 'Host is up') | ||
+ | |||
+ | echo . | ||
+ | echo . | ||
+ | if [[ -z $Status ]] | ||
+ | then | ||
+ | StatusText="$Service Server op ${Host} is niet online" | ||
+ | else | ||
+ | StatusText="$Service Server op ${Host} is online" | ||
+ | fi | ||
+ | |||
+ | zenity --info --height=100 --width=400 --title="Status $Service server" --text="$StatusText" | ||
+ | </syntaxhighlight> | ||
+ | Je hoeft alleen het ip-adres van de ssh-server in te vullen. | ||
− | =Automatische synchronisatie= | + | Als de host online is zal de grep<ref>[https://www.cyberciti.biz/faq/howto-use-grep-command-in-linux-unix/#Pipes How To Use grep Command In Linux / UNIX With Practical Examples]</ref> opdracht de tekst '''Host is up''' vinden in de regel |
− | Dan gaan we nu verder met twee scripts voor automatische synchronisatie van mappen tussen twee computers. | + | ;Host is up (0.00050s latency). |
+ | en dat is de voorwaarde om de status online door te geven. Omdat de zoektekst uit meedere woorden bestaat is deze tussen enkele quotes geplaatst. | ||
+ | |||
+ | De zenity<ref>[https://help.gnome.org/users/zenity/3.24/index.html.en Zenity Manual]</ref> opdracht geeft vervolgens een melding op het scherm. Zenity is een opdracht met uitgebreide mogelijkheden voor input en weergave. | ||
+ | |||
+ | Bij het opslaan van deze scripts moet je bij de Eigenschappen onder de tab Rechten toestaan dat het bestand wordt uitgevoerd als programma. | ||
+ | |||
+ | Beide scripts kunnen met een programmastarter op het buroblad worden geplaatst. Je kunt het icoon bijvoorbeeld veranderen in network-idle. Voor het eerste script met terminal uitvoer moet je bij het aanmaken van de starter aangeven dat de opdracht in een terminal wordt uitgevoerd. Bij die met een melding op het scherm juist niet. | ||
+ | |||
+ | ==Automatische synchronisatie== | ||
+ | Dan gaan we nu verder met twee scripts voor automatische synchronisatie van mappen tussen twee computers. Synchroniseren gebeurt met behulp van de '''rsync'''<ref>[https://linux.die.net/man/1/rsync rsync(1) - Linux man page]</ref><ref>[https://linuxize.com/post/how-to-use-rsync-for-local-and-remote-data-transfer-and-synchronization/ Rsync Command in Linux with Examples]</ref> opdracht. Om de gebruiker te informeren over de voortgang van de synchronisatie wordt de zenity opdracht gebruikt. Ditmaal als een progress dialog.<br /> | ||
We beginnen met het script voor het uploaden van mappen van een lokale computer naar de ssh server. | We beginnen met het script voor het uploaden van mappen van een lokale computer naar de ssh server. | ||
− | Het shell script noemen we ssh-popeye-uploaden.sh. | + | ===Uploaden=== |
+ | Het shell script noemen we '''ssh-popeye-uploaden.sh'''. <br /> | ||
Voor popeye gebruik je de naam van je eigen remote machine | Voor popeye gebruik je de naam van je eigen remote machine | ||
− | + | <syntaxhighlight lang="bash"> | |
− | |||
− | |||
#!/bin/bash | #!/bin/bash | ||
# uploaden, push | # uploaden, push | ||
# rsync van desktop naar ssh server | # rsync van desktop naar ssh server | ||
− | |||
# -r, --recursive recurse into directories | # -r, --recursive recurse into directories | ||
Regel 258: | Regel 393: | ||
Doel='/home/mogenblue' | Doel='/home/mogenblue' | ||
− | # | + | #--------------------------------------------------------------------------------- |
( | ( | ||
− | |||
echo "# Test online status ssh ${Host} ... -/-" | echo "# Test online status ssh ${Host} ... -/-" | ||
Regel 268: | Regel 402: | ||
if [[ $Status == ok ]] ; then | if [[ $Status == ok ]] ; then | ||
− | + | echo "# ${Host} online, doorgaan met uploaden." | |
else | else | ||
echo "# ${Host} niet online, uploaden afgebroken." | echo "# ${Host} niet online, uploaden afgebroken." | ||
Regel 274: | Regel 408: | ||
exit | exit | ||
fi | fi | ||
− | |||
echo '10' | echo '10' | ||
Regel 298: | Regel 431: | ||
echo '80' | echo '80' | ||
echo "# Synchroniseren Video's ... 6/6" | echo "# Synchroniseren Video's ... 6/6" | ||
− | rsync $Opties "$Bron/Video's" ${User}@${Host}:$Doel | + | rsync $Opties "${Bron}/Video's" ${User}@${Host}:$Doel |
− | |||
echo '100' | echo '100' | ||
echo '# Synchronisatie voltooid.' | echo '# Synchronisatie voltooid.' | ||
− | |||
# minimaal 1 seconde tonen ter bevestiging van synchroniseren | # minimaal 1 seconde tonen ter bevestiging van synchroniseren | ||
sleep 1 | sleep 1 | ||
− | |||
) | | ) | | ||
Regel 315: | Regel 445: | ||
--percentage=0 \ | --percentage=0 \ | ||
--auto-close --no-cancel --width=600 | --auto-close --no-cancel --width=600 | ||
− | + | </syntaxhighlight> | |
− | |||
− | |||
Bovenaan in het script staan de variabelen waar je je eigen gegevens moet invullen: de naam van de verbinding, je username en het pad naar je eigen usermap op de lokale en de remote machine. | Bovenaan in het script staan de variabelen waar je je eigen gegevens moet invullen: de naam van de verbinding, je username en het pad naar je eigen usermap op de lokale en de remote machine. | ||
Je kunt natuurlijk de mappen aanpassen die gesynchroniseerd moeten worden maar let er goed op dat je geen / teken aan het eind een map zet. Dat kan desastreuze gevolgen hebben voor je gegevens. Het kan vrijwel alle mappen op je lokale machine, inclusief het buroblad, verwijderen. | Je kunt natuurlijk de mappen aanpassen die gesynchroniseerd moeten worden maar let er goed op dat je geen / teken aan het eind een map zet. Dat kan desastreuze gevolgen hebben voor je gegevens. Het kan vrijwel alle mappen op je lokale machine, inclusief het buroblad, verwijderen. | ||
− | Maak dus eerst een BACKUP voor je gaat experimenteren! B-A-C-K-U-P | + | Maak dus eerst een '''BACKUP''' voor je gaat experimenteren! '''B-A-C-K-U-P''' |
+ | ===Downloaden=== | ||
Het script voor downloaden ziet er iets gecompliceerder uit. | Het script voor downloaden ziet er iets gecompliceerder uit. | ||
− | Dat noemen we ssh-popeye-downloaden.sh. | + | Dat noemen we '''ssh-popeye-downloaden.sh'''. |
Voor popeye gebruik je weer de naam van je eigen remote machine | Voor popeye gebruik je weer de naam van je eigen remote machine | ||
− | + | <syntaxhighlight lang="bash"> | |
− | |||
#!/bin/bash | #!/bin/bash | ||
Regel 354: | Regel 482: | ||
Doel='/home/mogenblue' | Doel='/home/mogenblue' | ||
− | # | + | #--------------------------------------------------------------------------------------- |
( | ( | ||
− | |||
echo "# Test online status ssh ${Host} ... -/-" | echo "# Test online status ssh ${Host} ... -/-" | ||
Regel 370: | Regel 497: | ||
exit | exit | ||
fi | fi | ||
− | |||
echo '10' | echo '10' | ||
Regel 394: | Regel 520: | ||
echo '80' | echo '80' | ||
echo "# Synchroniseren Video's ... 6/6" | echo "# Synchroniseren Video's ... 6/6" | ||
− | rsync $Opties "${User}@${Host}:$Bron/Video's" $Doel | + | rsync $Opties "${User}@${Host}:${Bron}/Video's" $Doel |
− | |||
echo '100' | echo '100' | ||
echo '# Synchronisatie voltooid.' | echo '# Synchronisatie voltooid.' | ||
− | |||
# minimaal 1 seconde tonen ter bevestiging van synchroniseren | # minimaal 1 seconde tonen ter bevestiging van synchroniseren | ||
sleep 3 | sleep 3 | ||
− | |||
) | | ) | | ||
Regel 413: | Regel 536: | ||
--percentage=0 --pulsate \ | --percentage=0 --pulsate \ | ||
--auto-close --no-cancel --width=600 | --auto-close --no-cancel --width=600 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Beide scripts moeten als programma kunnen worden uitgevoerd:<br /> | ||
+ | Rechtsklik op het bestand voor het contextmenu.<br /> | ||
+ | Selecteer Eigenschappen.<br /> | ||
+ | Ga naar de tab Rechten.<br /> | ||
+ | Zet een vinkje bij Uitvoeren: Toestaan dat bestand wordt uitgevoerd als programma. | ||
+ | |||
+ | Met deze twee scripts kun je automatisch je lokale mappen synchroniseren met de mappen op de host machine.<br /> | ||
+ | Op een 1Gb netwerk gaat dat met ruim 115MB/sec.<br /> | ||
+ | Als er niet teveel veranderd is is het binnen 10-15 seconden gebeurd. | ||
+ | |||
+ | ==Methoden voor synchronisatie== | ||
+ | Je kan op drie manieren synchroniseren met de ssh server: | ||
+ | #handmatig: je start elke keer handmatig een script voor uploaden of downloaden; | ||
+ | #op een tijdsinterval: je kunt om de vier uur of op bepaalde tijden synchroniseren; | ||
+ | #bij bepaalde gebeurtenissen: met name bij het ontwaken uit de slaapstand en het overgaan naar de slaapstand toe kun je de mappen laten synchroniseren. | ||
+ | |||
+ | ===Handmatige synchronisatie=== | ||
+ | Je kunt voor de eenvoud een snelkoppeling of een snelstarter op het buroblad plaatsen naar de ssh scripts. Het verschil tussen die twee is dat een programmastarter ook in het menu en op de werkbalk kan worden geplaatst. Je kunt voor allebei een ander icoon kiezen dan de standaard. Voor ssh is geen apart icoon beschikbaar, maar je kunt bijvoorbeeld ook die van ftp gebruiken. | ||
+ | |||
+ | ===Synchronisatie op tijdsinterval=== | ||
+ | Je kunt er ook voor kiezen om te synchroniseren op bepaalde tijden of om de zoveel uur. Daarvoor kun je je eigen crontab aanpassen met | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | crontab -e | ||
+ | </pre> | ||
+ | Als je bijvoorbeeld elke 3 uur wilt uploaden kun je de volgende regel gebruiken | ||
+ | <pre> | ||
+ | * */3 * * * /home/mogenblue/scripts/ssh-popeye-uploaden.sh | ||
+ | </pre> | ||
+ | Als je om 11 uur en om 17 uur wilt uploaden kun je dat in één regel schrijven met | ||
+ | <pre> | ||
+ | * 11,17 * * * /home/mogenblue/scripts/ssh-popeye-uploaden.sh | ||
+ | </syntaxhighlight> | ||
+ | Zo kun je bijvoorbeeld ook om de dag synchroniseren. | ||
+ | Met deze [https://crontab.guru/ Crontab guru] kun je eenvoudig een schema opstellen en is erg flexibel. | ||
+ | |||
+ | ===Synchronisatie op gebeurtenis=== | ||
+ | Tenslotte kun je ook synchroniseren op bepaalde gebeurtenissen en dan met name op het moment van ontwaken uit de slaapstand van de computer en op het moment dat de computer naar de slaapstand toe gaat. Dit zijn zeer uitgekiende momenten om te synchroniseren omdat je nog niets gedaan hebt wanneer de computer ontwaakt en je helemaal klaar bent wanneer de computer naar de slaapstand toe gaat. | ||
+ | Dit is de methode die ik zelf gebruik. | ||
+ | |||
+ | Voor het synchroniseren bij het ontwaken gebruik ik twee scripts. In principe kun je ze in elkaar schuiven, maar ik vind het handiger om ze te splitsen voor het geval ik aan het tweede iets wil veranderen. En als je een backup maakt worden al je scripts meegenomen, maar niet de scripts die in de systeemmappen staan. Die moet je bij een herinstallatie opnieuw daar in zetten. | ||
+ | |||
+ | Voor mogenblue moet je je eigen username gebruiken. | ||
+ | |||
+ | Het eerste script staat in de map '''/etc/network/if-up.d''' en het heet '''computer-network-up-run''': | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | #!/bin/sh | ||
+ | |||
+ | # dit bestand hoort in de map | ||
+ | # /etc/network/if-up.d | ||
+ | # van de ssh client | ||
+ | # het wordt uitgevoerd zodra het netwerk up is | ||
+ | |||
+ | #----------------------------------------------------------------------------------------------------- | ||
+ | |||
+ | # sync user files | ||
+ | sudo -u mogenblue /home/mogenblue/scripts/computer-network-up.sh | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Het enige wat dit script dus doet is het tweede aanroepen. Het bijzondere van dit script is dat het automatisch wordt uitgevoerd door het systeem bij het ontwaken uit de slaapstand. | ||
+ | Dit bestand moet als eigenaar en groep root hebben en het moet uitvoerbaar zijn. | ||
+ | Je kunt dit script aanmaken in je lokale scripts map zodat je er een backup van hebt. Dan moet je het daarna naar de juiste map kopiëren en de rechten aanpassen.<br /> | ||
+ | Rechts klik voor het context menu<br /> | ||
+ | klik op kopiëren<br /> | ||
+ | navigeer naar de root directory<br /> | ||
+ | rechts klik op /etc map<br /> | ||
+ | selecteer openen als beheerder<br /> | ||
+ | voer je wachtwoord in<br /> | ||
+ | ga naar de map network<br /> | ||
+ | ga naar de map if-up.d<br /> | ||
+ | plak het bestand in deze map<br /> | ||
+ | rechts klik voor het context menu op het bestand<br /> | ||
+ | kies eigenschappen<br /> | ||
+ | verander onder de tab rechten user en groep naar root. | ||
+ | |||
+ | Het tweede script staat gewoon in je scripts map en heet dus '''computer-network-up.sh''': | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | #!/bin/bash | ||
+ | |||
+ | # controlebestand | ||
+ | ControleBestand="/home/mogenblue/test-network-up.txt" | ||
+ | WachtSecondenVerwijderen=30 | ||
+ | |||
+ | #-------------------------------------------------- | ||
+ | |||
+ | # controleer of het script al is uitgevoerd na ontwaken of reboot, 1 keer is genoeg | ||
+ | if [ -e $ControleBestand ] | ||
+ | then | ||
+ | exit | ||
+ | fi | ||
+ | |||
+ | # maak controle bestand om te voorkomen | ||
+ | # dat het script meerdere keren wordt uitgevoerd na ontwaken of reboot | ||
+ | Datum=$(date +%Y/%m/%d_%H:%M:%S.%N) ; Datum=${Datum:0:23} | ||
+ | echo "$Datum: ontwaken controle bestand" >> $ControleBestand | ||
+ | |||
+ | |||
+ | # synchroniseren over ssh, downloaden | ||
+ | source /home/mogenblue/scripts/ssh-popeye-downloaden.sh | ||
+ | |||
+ | # verwijder in de achtergrond het controle bestand na voltooien ontwaken of reboot | ||
+ | ( | ||
+ | if [ -e $ControleBestand ] | ||
+ | then | ||
+ | sleep $WachtSecondenVerwijderen | ||
+ | rm $ControleBestand | ||
+ | fi | ||
+ | ) & | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Dit bestand moet ook uitvoerbaar zijn en mag verder gewoon de rechten van de user hebben. | ||
+ | |||
+ | Het tweede bestand controleert of de synchronisatie is of wordt uitgevoerd en voorkomt dat het nog keer gebeurt. Als het nog niet is uitgevoerd wordt gewoon het script om te downloaden aangeroepen en worden de laatste wijzigingen van de server naar de client gedownload. | ||
+ | |||
+ | Omdat het download script bij het ontwaken oorspronkelijk door root wordt aangeroepen moet het zenity commando op een meer complexe manier worden gestart anders weet het systeem niet waar de output voor het scherm naartoe moet. Daarom staat daar die complexe regel in met username en userid. | ||
+ | |||
+ | Tenslotte het synchroniseren bij het overgaan naar de slaapstand. Uploaden naar de ssh server. | ||
+ | Daarvoor hebben we maar één extra bestand nodig: '''computer-suspend.sh''': | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | #!/bin/bash | ||
+ | |||
+ | # dit script moet worden uitgevoerd op de ssh client | ||
+ | # icoon night-light-symbolic | ||
+ | |||
+ | # controlebestand | ||
+ | ControleBestand="/home/mogenblue/test-network-up.txt" | ||
+ | |||
+ | #-------------------------------------------------- | ||
+ | |||
+ | # controleer of het testbestand bestaat en verwijder het dan | ||
+ | if [ -e $ControleBestand ] | ||
+ | then | ||
+ | rm $ControleBestand | ||
+ | fi | ||
+ | |||
+ | # synchroniseren over ssh, uploaden | ||
+ | source /home/mogenblue/scripts/ssh-popeye-uploaden.sh | ||
+ | |||
+ | # slaapstand activeren | ||
+ | systemctl suspend | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Dit script doet drie dingen: | ||
+ | #het roept het eigenlijke synchronisatie script voor uploaden aan | ||
+ | #het verwijdert het controle bestand dat voorkomt dat downloaden bij ontwaken twee keer wordt uitgevoerd | ||
+ | #en het roept de slaapstand van de computer aan. | ||
+ | |||
+ | Zoals alle andere scripts moet het uitvoerbaar zijn. | ||
+ | Je kunt het met een snelkoppeling of een snelstarter op het buroblad zetten. Het aanbevolen icoon is boven aan het script genoemd. | ||
+ | |||
+ | Dit script kan ook via een sneltoets aan je toetsenbord worden verbonden:<br /> | ||
+ | Rechts klik op de werkbalk<br /> | ||
+ | kies Systeeminstellingen<br /> | ||
+ | ga naar Toetsenbord<br /> | ||
+ | kies de tab Sneltoetsen<br /> | ||
+ | druk op de knop Voeg aangepaste sneltoets toe<br /> | ||
+ | vul een naam in, bijvoorbeeld computer-suspend<br /> | ||
+ | selecteer dan bij de opdracht het script '''computer-suspend.sh'''<br /> | ||
+ | klik op toevoegen<br /> | ||
+ | klik dan in het onderste venster toetsenbordbindingen op de eerste regel niet-toegewezen<br /> | ||
+ | klik er nogmaals op om een toets te selecteren<br /> | ||
+ | druk op de pauze toets op het toetsenbord om deze aan de opdracht te binden<br /> | ||
+ | sluit het venster | ||
+ | |||
+ | Klaar.<br /> | ||
+ | Druk op de pauze toets om te controleren of het systeem inderdaad gaat uploaden en daarna de slaapstand aanroept. | ||
+ | Bij het ontwaken zou dan het download script moeten worden aangeroepen. | ||
+ | |||
+ | De client computer is nu helemaal geconfigureerd om automatisch te synchroniseren met de ssh server in je netwerk. | ||
+ | |||
+ | ==Optimaliseren synchronisatie== | ||
+ | Synchronisatie tussen client en server gaat in het dagelijks gebruik vrij snel als er niet zoveel veranderd is. Op een 1Gb netwerk is het proces meestal binnen 10 seconden voltooid, maar dat hangt ook af van de snelheid van de processor op de client en server computer en of de router 1Gb op alle ethernetpoorten ondersteunt. | ||
+ | Synchronisatie is niet alleen data-overdracht maar ook het vergelijken van de directory structuren op wijzigingen die bepalen hoelang het proces duurt. En daarvoor heb je rekenkracht nodig. Daarvoor heb je een krachtige cpu nodig als je dat wilt versnellen. | ||
+ | |||
+ | De scripts die hier voor synchronisatie zijn gegeven gebruiken niet de volle kracht van modernere cpu's. Deze hebben meestal meer rekenkernen en kunnen 2, 4, 6 of meer processen tegelijk verwerken. | ||
+ | |||
+ | De synchronisatie scripts zijn zo geschreven dat het als één proces wordt uitgevoerd. De opdrachten worden één voor één achter elkaar uitgevoerd en het systeem gaat pas verder met de volgende opdracht wanneer de voorgaande opdracht voltooid is. | ||
+ | Dat is op zich al vrij snel, maar met een kleine aanpassing kunnen de rsync opdrachten allemaal tegelijk worden uitgevoerd door de cpu als die meer processen tegelijk kan verwerken. | ||
+ | |||
+ | Als ze allemaal tegelijk worden uitgevoerd wordt de uitvoering van het script verkort tot ongeveer de tijd die de langste synchronisatie opdracht duurt. Meestal is dat de map met afbeeldingen, video's of muziek. En dan benut je de kracht van de cpu maximaal. | ||
+ | |||
+ | De truuk om dit te bereiken is door de rsync opdrachten allemaal naar de achtergrond te sturen<ref>[https://linuxize.com/post/how-to-run-linux-commands-in-background/ How to Run Linux Commands in Background]</ref>. Dan worden ze elk in een eigen achtergrondproces uitgevoerd. Zodra een opdracht is weggestuurd gaat het hoofproces verder met de volgende opdracht. | ||
+ | Deze werking bereik je door aan het eind van elke rsync opdracht het ampersand teken (&) toe te voegen. Dat is het signaal aan het systeem om de opdracht in de achtergrond uit te voeren. | ||
+ | Aan het eind van de verwerking wordt dan de wait<ref>[https://unix.stackexchange.com/questions/76717/launch-a-background-process-and-check-when-it-ends/76720 Launch a background process and check when it ends]</ref> opdracht toegevoegd. Hierdoor zal het systeem op dat punt in het script blijven wachten totdat alle achtergrondprocessen zijn voltooid. | ||
+ | |||
+ | Het gevolg hiervan is dat de process dialog geen zinnige informatie meer kan geven over waar het systeem mee bezig is. Daarom wordt de pulsate optie meegegeven zodat de voortgangsbalk verandert in een pulserende balk. | ||
+ | Voor de duidelijkheid aan de eindgebruiker wordt met de sleep opdracht nog 1 seconde gewacht om de melding op het scherm nog enigszins leesbaar te houden. Als je wil kun je die opdracht omzeilen door er een pound teken (#) voor te zetten zodat het een commentaarregel wordt. | ||
+ | |||
+ | Hieronder volgen twee scripts voor een geoptimaliseerde synchronisatie tussen client en server. Push en pull, uploaden en downloaden, met maximaal gebruik van de cpu kracht. | ||
+ | |||
+ | ===Uploaden geoptimaliseerd=== | ||
+ | Het shell script voor uploaden noemen we '''ssh-popeye-uploaden-o.sh'''. <br /> | ||
+ | Voor popeye gebruik je de naam van je eigen remote machine | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | #!/bin/bash | ||
+ | |||
+ | # geoptimaliseerd uploaden, push | ||
+ | # rsync van desktop naar ssh server | ||
+ | |||
+ | # -r, --recursive recurse into directories | ||
+ | # -t, --times preserve modification times | ||
+ | # -u, --update skip files that are newer on the receiver | ||
+ | # -s, --protect-args no space-splitting; wildcard chars only | ||
+ | # -l, --links copy symlinks as symlinks | ||
+ | # --exclude 'PATTERN' exclude files matching PATTERN | ||
+ | # -m, --prune-empty-dirs prune empty directory chains from file-list | ||
+ | # --delete delete extraneous files from dest dirs | ||
+ | |||
+ | # vul hier je eigen gegevens in | ||
+ | User='mogenblue' | ||
+ | Host='popeye' | ||
+ | |||
+ | Opties='-r -t -u -s -l -m --delete' | ||
+ | Bron='/home/mogenblue' | ||
+ | Doel='/home/mogenblue' | ||
+ | |||
+ | #--------------------------------------------------------------------------------- | ||
+ | |||
+ | ( | ||
+ | |||
+ | echo "# Test online status ssh ${Host} ... -/-" | ||
+ | |||
+ | Status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 ${User}@${Host} echo ok 2>&1) | ||
+ | |||
+ | if [[ $Status == ok ]] ; then | ||
+ | echo "# ${Host} online, doorgaan met uploaden." | ||
+ | else | ||
+ | echo "# ${Host} niet online, uploaden afgebroken." | ||
+ | sleep 5 | ||
+ | exit | ||
+ | fi | ||
+ | |||
+ | echo '# Synchroniseren bestanden ...' | ||
+ | |||
+ | rsync $Opties $Bron/Documenten ${User}@${Host}:$Doel & | ||
+ | rsync $Opties $Bron/Downloads ${User}@${Host}:$Doel & | ||
+ | rsync $Opties $Bron/Linux ${User}@${Host}:$Doel & | ||
+ | rsync $Opties $Bron/Afbeeldingen ${User}@${Host}:$Doel & | ||
+ | rsync $Opties $Bron/Muziek ${User}@${Host}:$Doel & | ||
+ | rsync $Opties "${Bron}/Video's" ${User}@${Host}:$Doel & | ||
+ | |||
+ | echo '# Synchronisatie voltooien ...' | ||
+ | # minimaal 1 seconde tonen ter bevestiging van synchroniseren | ||
+ | sleep 1 | ||
+ | wait | ||
+ | |||
+ | ) | | ||
+ | zenity --progress \ | ||
+ | --title="Synchroniseren met ${Host} - push" \ | ||
+ | --text="Vergelijken en uploaden ..." \ | ||
+ | --percentage=0 \ | ||
+ | --auto-close --no-cancel --width=600 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Bovenaan in het script staan de variabelen waar je je eigen gegevens moet invullen: de naam van de verbinding, je username en het pad naar je eigen usermap op de lokale en de remote machine. | ||
+ | |||
+ | ===Downloaden geoptimaliseerd=== | ||
+ | Het script voor downloaden noemen we '''ssh-popeye-downloaden-o.sh'''. | ||
+ | Voor popeye gebruik je weer de naam van je eigen remote machine | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | #!/bin/bash | ||
+ | |||
+ | # geoptimaliseerd downloaden, pull | ||
+ | # rsync van ssh server naar desktop | ||
+ | |||
+ | # -r, --recursive recurse into directories | ||
+ | # -t, --times preserve modification times | ||
+ | # -u, --update skip files that are newer on the receiver | ||
+ | # -s, --protect-args no space-splitting; wildcard chars only | ||
+ | # -l, --links copy symlinks as symlinks | ||
+ | # --exclude 'PATTERN' exclude files matching PATTERN | ||
+ | # -m, --prune-empty-dirs prune empty directory chains from file-list | ||
+ | # --delete delete extraneous files from dest dirs | ||
+ | |||
+ | # vul hier je eigen gegevens in | ||
+ | User='mogenblue' | ||
+ | Host='popeye' | ||
+ | # userid is in een terminal op te vragen met id -u username | ||
+ | UserID='1000' | ||
− | + | Opties='-r -t -u -s -l -m --delete' | |
+ | Bron='/home/mogenblue' | ||
+ | Doel='/home/mogenblue' | ||
+ | #--------------------------------------------------------------------------------------- | ||
− | + | ( | |
− | + | ||
− | + | echo "# Test online status ssh ${Host} ... -/-" | |
− | + | ||
− | + | Status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 ${User}@${Host} echo ok 2>&1) | |
+ | |||
+ | if [[ $Status == ok ]] ; then | ||
+ | echo "# ${Host} online, doorgaan met downloaden." | ||
+ | else | ||
+ | echo "# ${Host} niet online, downloaden afgebroken." | ||
+ | sleep 5 | ||
+ | exit | ||
+ | fi | ||
+ | |||
+ | echo '# Synchroniseren bestanden ...' | ||
− | + | rsync $Opties ${User}@${Host}:$Bron/Documenten $Doel & | |
− | + | rsync $Opties ${User}@${Host}:$Bron/Downloads $Doel & | |
− | + | rsync $Opties ${User}@${Host}:$Bron/Linux $Doel & | |
+ | rsync $Opties ${User}@${Host}:$Bron/Afbeeldingen $Doel & | ||
+ | rsync $Opties ${User}@${Host}:$Bron/Muziek $Doel & | ||
+ | rsync $Opties "${User}@${Host}:${Bron}/Video's" $Doel & | ||
− | + | echo '# Synchronisatie voltooien ...' | |
+ | # minimaal 1 seconde tonen ter bevestiging van synchroniseren | ||
+ | sleep 1 | ||
+ | wait | ||
− | + | ) | | |
− | |||
+ | sudo -u $User DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UserID/bus \ | ||
+ | zenity --progress \ | ||
+ | --title="Synchroniseren met ${Host} - pull" \ | ||
+ | --text="Vergelijken en downloaden ..." \ | ||
+ | --percentage=0 --pulsate \ | ||
+ | --auto-close --no-cancel --width=600 | ||
− | + | </syntaxhighlight> | |
+ | |||
+ | Beide scripts moeten als programma kunnen worden uitgevoerd:<br /> | ||
+ | Rechtsklik op het bestand voor het contextmenu.<br /> | ||
+ | Selecteer Eigenschappen.<br /> | ||
+ | Ga naar de tab Rechten.<br /> | ||
+ | Zet een vinkje bij Uitvoeren: Toestaan dat bestand wordt uitgevoerd als programma. | ||
− | + | Als je de langst durende opdracht boven aan de lijst zet ben je misschien nog wel een tiende van een seconde sneller!! | |
− | |||
+ | == Herstel bestanden vanuit backup == | ||
+ | Als je bestanden vanuit een backup terugzet moet je er rekening mee houden dat deze een oudere datum hebben dan de laatste versie. Daarom kun je niet zomaar synchroniseren om de backup naar de andere computers te krijgen. Want dan wordt de datum vergeleken tussen de versies op de computers en de oudste versie, die je dus net hebt teruggezet, wordt dan overschreven. Dus dan ben je hem meteen weer kwijt. | ||
− | + | Daarom moet je bij herstel van bestanden deze handmatig naar de andere computers overzetten. | |
− | + | Je kunt ook het oudere bestand openen en opnieuw opslaan. Dan wordt dat het laatst gewijzigde bestand en dan wordt het bij synchroniseren wél over de versies op de andere computers heen geschreven. | |
− | + | Als je een hele map gaat terugzetten geldt dat natuurlijk ook. Voordat je daar aan begint kun je eerst een kopie van die map maken en dan kun je de hele map weggooien en de backup ervoor in de plaats zetten. Dan kun je kijken of daar alle bestanden in staan zoals je dat wil hebben en eventueel bestanden uit je kopie map terugzetten. Als je daarmee klaar bent moet je op de andere computers handmatig die map verwijderen en de herstelde map daar naartoe kopiëren. | |
− | + | En pas daarna kun je weer op de normale manier gaan synchroniseren. | |
− | |||
− | |||
− | + | == Externe Links == | |
− | https://linuxize.com/post/using-the-ssh-config-file/#ssh-config-file-example | + | :[https://linuxize.com/post/how-to-enable-ssh-on-ubuntu-20-04/ How to Enable SSH on Ubuntu 20.04] |
+ | :[https://linuxize.com/post/how-to-setup-passwordless-ssh-login/ How to Setup Passwordless SSH Login] | ||
+ | :[https://linuxize.com/post/using-the-ssh-config-file/#ssh-config-file-example Using the SSH Config File] | ||
+ | :[https://help.ubuntu.com/community/SSH/OpenSSH/Configuring SSH/OpenSSH/Configuring] | ||
+ | :[https://www.mycomputertips.co.uk/77 Access FTP server using the Nemo File Manager in Linux Mint] | ||
+ | :[https://linuxize.com/post/how-to-transfer-files-with-rsync-over-ssh/ How to Transfer Files with Rsync over SSH] | ||
+ | :[https://stackoverflow.com/questions/1405324/how-to-create-a-bash-script-to-check-the-ssh-connection How to create a bash script to check the SSH connection?] | ||
+ | :[https://linoxide.com/bash-shell-script-show-dialog-box/ How to Show Dialog Box using Shell Script with Examples] | ||
+ | :[https://help.gnome.org/users/zenity/3.24/progress.html.en Progress Dialog] | ||
− | + | == Referenties == | |
− | |||
− | + | [[Categorie:Internet]] | |
− |
Huidige versie van 8 mrt 2022 om 09:30
File-sharing en synchronisatie via SSH in je thuisnetwerk
SSH staat voor secure shell. Het is een netwerkprotocol dat gebruik maakt van een beveiligde verbinding. Elke uitwisseling van gegevens tussen twee computers is versleuteld. SSH is gebaseerd op het client server model. Een server verleent toegang aan een client (gebruiker). Met ssh kun je onder meer veilig bestanden delen en overzetten via SFTP. En dat is het onderwerp van dit artikel.
Inhoud
Inleiding
In dit artikel leg ik uit
- hoe je ssh moet opzetten,
- hoe je bestanden op de andere computer kan gebruiken vanuit je bestandsbeheerder (Nemo),
- hoe je een snelkoppeling naar een map op de andere computer op je bureaublad zet,
- hoe je bestanden op de server vanaf een smartphone of tablet kan gebruiken
- en hoe je hele mappen synchroniseert tussen twee computers.
Ik begin met een korte uitleg over het opzetten van je netwerk: apparatuur en bekabeling,
dan iets over de firewall en ip adressen,
dan het installeren van de software voor ssh,
daarna komt het delen en synchroniseren aan de beurt.
Ik zal ook een aantal links geven waar ik mijn wijsheid vandaan heb gehaald.
Netwerk
Om te beginnen kan het wenselijk zijn om je netwerk met een draadloze router uit te breiden omdat er steeds meer apparaten bijkomen. Voor het uitbreiden van je netwerk is een switch het meest aangewezen apparaat qua kostprijs en eenvoud, maar voor draadloze apparaten of om het bereik van je draadloze netwerk uit te breiden heb je toch wel een router nodig. Op WikiHow staat een heel goed artikel[1] waarin stap voor stap wordt uitgelegd hoe je een router aan je netwerk moet toevoegen zodat de computers en mobiele apparatuur allemaal voor elkaar zichtbaar blijven.
De clou is dat je op de hulp router eerst de dhcp server uitschakelt en vervolgens niet de wan poort maar een lan poort gebruikt om naar de hoofdrouter te verbinden. Als je de dhcp server niet uitschakelt interfereert die met die van de hoofdrouter. Dan gaat je net op slot en kan je helemaal overnieuw beginnen.
Firewall
Om ssh op een computer te kunnen gebruiken moet je er voor zorgen dat de clients toegang hebben tot de computer waarop de ssh server draait. Dat betekent dat je de firewall van de ssh server moet aanpassen. Een heel handig hulpmiddel hiervoor is UFW[2]
Met UFW is het heel eenvoudig om individuele ip adressen van de lokale apparatuur toegang te geven tot de server. Dat betekent wel dat je dan statische ip adressen in je netwerk moet hebben. Die voer je handmatig in je apparaten in. Je gebruikt dus geen dhcp. De gateway is het adres van je router. In de router doe je IP&MAC binding voor extra veiligheid. Maak een tabel in een tekstdocument of spreadsheet met apparaat, mac adres, ip adres en locatie. Die kun je bijna 1 op 1 in je router zetten bij IP&MAC binding. Sommige laptops hebben kabel en wifi. Dan kunnen ze aparte mac adressen hebben voor kabel en wifi. Die moeten verschillende ip adressen hebben.
Je kunt op de server een client met adres 192.168.1.183 toegang geven via de regel
sudo ufw allow from 192.168.1.183
Meer is het niet.
Het is sowieso aan te raden om statische adressen in je netwerk te gebruiken omdat het verbinding maken met de server daardoor eenvoudiger wordt. Dat gaat met behulp van het configuratiebestand wat verderop wordt uitgelegd.
Alle apparaten die toegang moeten hebben tot je ssh server moeten door de firewall worden doorgelaten: computers, laptops, smartphones en tablets. Dus voor elk apparaat moet je een regel aanmaken. Je kunt beter niet een reeks van ip-adressen toegang geven want dan zet je de firewall onnodig verder open. Je hoeft het maar één keer te doen.
Als alternatief kun je voor ssh poort 22 openzetten. Dat doe je via de regel
sudo ufw allow ssh
Maar dan staat de firewall open voor alle apparaten die via ssh verbinding willen maken, ook van de buitenwereld buiten je lokale netwerk. Want dan wordt er niet meer op het ip-adres gecontroleerd.
Dan is de firewall van je router de last line of defense geworden. Als je geen IP&MAC binding hebt.
Daarom gebruik ik dit niet in mijn eigen netwerk.
Je kunt het aantal pogingen beperken waarmee een ip-adres een nieuwe verbinding tot stand probeert te brengen. Als een ip-adres meer dan 10 keer in 30 seconden probeert te verbinden zullen alle volgende pogingen worden genegeerd. Dit doe je door de volgende regel toe te voegen aan de firewall:
sudo ufw limit ssh
Dit verbetert de beveiliging van de server.
Om te zien welke apparaten er op je LAN zijn aangesloten kun je de opdracht arp-scan[3] gebruiken. Voor het uitvoeren van die opdracht heb je root bevoegdheden nodig dus je moet de opdracht door sudo vooraf laten gaan en na enter je wachtwoord invoeren. De uitvoer ziet er dan ongeveer zo uit:
mogenblue@brutus ~ $ sudo arp-scan --localnet Interface: eno1, type: EN10MB, MAC: 24:3a:d5:0b:d7:d3, IPv4: 192.168.1.53 Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.1.1 40:64:a7:fe:1b:b9 TP-LINK TECHNOLOGIES CO.,LTD. 192.168.1.62 5c:dd:2b:7f:a4:e4 ASUSTek COMPUTER INC. 192.168.1.63 5c:ab:d5:3b:c9:eb Motorola Mobility LLC 3 packets received by filter, 0 packets dropped by kernel Ending arp-scan 1.9.7: 256 hosts scanned in 1.963 seconds (130.41 hosts/sec). 3 responded
SSH server
Installatie
Om SSH te gebruiken moet het softwarepakket OpenSSH-server worden geïnstalleerd op de machine die als server gaat dienen. Dit kan gewoon vanuit programmabeheer worden geïnstalleerd.
Zodra de installatie voltooid is wordt de ssh service automatisch gestart. Je kunt dit in een terminal controleren met de opdracht
sudo systemctl status ssh
of
sudo service ssh status
de uitvoer ziet er dan ongeveer zo uit:
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-02-18 14:54:30 CET; 4 days ago
Docs: man:sshd(8)
man:sshd_config(5)
Process: 202638 ExecReload=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Process: 202639 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
Main PID: 82034 (sshd)
Tasks: 1 (limit: 18928)
Memory: 5.5M
CGroup: /system.slice/ssh.service
└─82034 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
Dat is het. Je kunt nu verbinding maken met de ssh server vanaf elke andere computer in je netwerk vooropgesteld dat de firewall van de server de ssh service of ip-adressen van die computers toelaat.
Verbinding maken met de ssh server
Om verbinding te maken met de ssh server heb je drie gegevens nodig.
- De username (gebruikersnaam) waarmee je op de server computer bekend bent,
- je wachtwoord
- en het ip adres van ssh server.
In een terminal kun je dan verbinding maken met het volgende commando
ssh username@server-ip-adress
Er wordt dan om het wachtwoord gevraagd. Type dat in en druk op enter.
Als je voor de eerste keer verbinding maakt wordt er gevraagd of je door wil gaan met verbinding maken. Antwoord met ja en druk op enter. Deze vraag verschijnt alleen de eerste keer omdat de server dan nog niet bekend is op je lokale machine. Een ECDSA vingerafdruk wordt nu toegevoegd en je bent verbonden met de ssh server.
Om de verbinding te verbreken type je exit in of sluit de terminal.
Je kunt de bestanden op de server ook in je bestandsbeheerder (Nemo) benaderen. Dat gaat als volgt.
- Open de bestandsbeheerder
- Klik in de menubalk op bestand
- Selecteer Verbinding maken met server...
- Vul in het venster bij server het ip-adres van de ssh server in
- Selecteer bij type SSH
- Bij de gebruikersgegevens moet je je username en het wachtwoord invullen
- Klik dan rechtsonder op de knop verbinden
Vervolgens verschijnt de mappenlijst van de server in beeld.
Je kunt nu door alle mappen op de ssh server bladeren en van en naar de server kopiëren en verplaatsen van mappen en bestanden.
Dit is file-sharing via ssh op 115 MB/s.
Vereenvoudigde verbinding
Het maken van verbinding kan op twee manieren worden vereenvoudigd.
- Ten eerste kan door het uitwisselen van een digitaal sleutelpaar zonder wachtwoord worden ingelogd.
- Ten tweede kan door een configuratie bestand het ip adres en de username aan een naam worden gekoppeld zodat je alleen nog die naam nodig hebt voor die verbinding.
Het combineren van beide methoden maakt een verbinding vrijwel transparant.
Inloggen zonder wachtwoord
Om met SSH zonder wachtwoord te kunnen inloggen moet je een openbare authenticatie sleutel aanmaken en deze toevoegen aan het bestand ~/.ssh/authorized_keys van de ssh server.
Dat gaat in drie stappen:
- controleer of er al een ssh sleutelpaar bestaat,
- maak een nieuw ssh sleutelpaar aan,
- kopieer de openbare sleutel naar de server.
1) Je moet eerst controleren of je al een ssh sleutel op je machine hebt want je hoeft hem niet te overschrijven. Dat kun je als volgt controleren:
Open de bestandsbeheerder
ga naar de home map, als je daar nog niet in staat
rechts klik voor het context menu
kies In terminal openen
Geef dan de opdracht
ls -al ~/.ssh/id_*.pu
Als je geen sleutels hebt krijg je een melding
- No matches found
of
- No such file or directory.
Als je wel sleutels hebt kun je de volgende stap overslaan.
2) Met de volgende opdracht kun je een nieuw sleutelpaar aanmaken van 4096 bit en je email-adres als commentaar:
ssh-keygen -t rsa -b 4096 -C "jouw-email@jouw-provider.nl"
Druk op Enter voor de standaard locatie en bestandnaam.
Vervolgens wordt je gevraagd om een secure passphrase in te voeren. Dat geeft een extra beveiliging. Die kun je gewoon leeg laten en met Enter er aan voorbij gaan.
Controleer of je ssh sleutels zijn aangemaakt met
ls ~/.ssh/id_*
De output ziet er ongeveer zo uit:
- /home/mogenblue/.ssh/id_rsa /home/mogenblue/.ssh/id_rsa.pub
In plaats van mogenblue zie je dan je eigen username.
Let erop dat je in je home directory staat want met ~/.ssh/..... kijkt het systeem naar de verborgen map .ssh vanaf de huidige map. De .ssh directory staat direct onder je home map, dus dan moet je daar staan om het systeem de map te laten vinden.
3) Om de sleutels te kunnen gebruiken moet je de openbare sleutel naar de server kopiëren. De makkelijkste manier daarvoor is met de ssh-copy-id opdracht
ssh-copy-id username@server_ip_address
Voor username moet je je eigen username gebruiken. Bij ip-adress vul je het ip adres van de ssh server in.
Er wordt dan om het wachtwoord gevraagd. Type dat in en druk op enter.
Daarna wordt de openbare sleutel op de server toegevoegd aan het user authorized_keys bestand en wordt de verbinding gesloten.
Je kunt nu inloggen zonder je wachtwoord te hoeven invoeren. In een terminal:
ssh username@server-ip-adress
en vul je eigen username en het ip-adres van de server in. In de bestandsbeheerder hoef je nu ook niet meer je wachtwoord in te voeren als je verbinding wilt maken.
Het user SSH config bestand
De tweede manier om het verbinden met de server te vereenvoudigen is door een naam aan de verbinding te geven en daar de noodzakelijke verbindingsgegevens aan te koppelen zoals ip-adres en username. Dat zet je dan in een ssh configuratiebestand onder je usermap. Precies gezegd in het ~/.ssh/config bestand.
Dus voor user mogenblue is het volledige pad
- /home/mogenblue/.ssh/config
Het staat in een verborgen map dus je moet in je bestandsbeheerder de verborgen mappen en bestanden laten tonen.
In dat bestand zet je bijvoorbeeld de volgende regels:
Host popeye HostName 192.168.1.17 Port 22 User mogenblue
Hiermee heb je voor de host met de naam popeye vastgelegd wat het ip-adres van de server is, welke poort wordt gebruikt en wat de username is die je op die server gebruikt. Nu kun je in een terminal met die host verbinding maken met de regel
ssh popeye
meer niet. Zo simpel is het geworden.
Er zijn nog meer mogelijkheden met het ssh config bestand maar om met een eenvoudig thuisnetwerk te beginnen met 1 of 2 servers is dit wel genoeg. Om het simpel te houden.
Verbindingen
Verbinden in de bestandsbeheerder
Nu kun je in je bestandsbeheerder eenvoudiger verbinding maken.
Open de bestandsbeheerder
Klik in de menubalk op bestand
Selecteer Verbinding maken met server...
Vul in het venster bij server de naam van je verbinding in (popeye)
Selecteer bij type SSH
Klik dan direct rechtsonder op de knop verbinden
Vervolgens verschijnt de mappenlijst van de server in beeld en kun je weer navigeren en kopiëren en plakken naar en van de server.
Omdat je kunt inloggen zonder wachtwoord hoef je dat niet meer in te vullen. En het ip-adres en de username worden in het configuratiebestand opgezocht.
Je kan nu ook in je bestandsbeheerder een bladwijzer aanmaken voor je map op de ssh server. Die verschijnt in de zijbalk aan de linkerkant. De verbinding met de server wordt om veiligheidsredenen automatisch na een bepaalde tijd verbroken. Maar je kunt gewoon op de bladwijzer klikken en dan wordt de verbinding automatisch hersteld. Makkelijker kan bijna niet. Of je moet ook met SSHFS werken.
Snelkoppeling naar de ssh server op je buroblad
Je kunt normaal gesproken geen snelkoppeling van een netwerk map in een lokale map of op je buroblad zetten. Dat gaat via een omweg.
Je moet eerst een starter voor bestandsbeheer op je buroblad zetten en dan die starter het netwerkadres van de map op de server geven om mee te openen.
Dat gaat zo:
Klik op de menuknop linksonder
Navigeer naar hulpmiddelen -> bestanden
Rechtsklik en kies voor Toevoegen aan bureaublad
Open de bestandsbeheerder door op het net toegevoegde icoon te klikken
Ga naar de home map op de ssh server
Rechtsklik in het venster met de mappenlijst en kies voor In terminal openen
De prompt ziet er ongeveer uit als
mogenblue@brutus /run/user/1000/gvfs/sftp:host=popeye/home/mogenblue $
Het gedeelte dat de remote host aangeeft moet je selecteren en kopieren, dus
/run/user/1000/gvfs/sftp:host=popeye/home/mogenblue
moet je selecteren
en via de menubalk kies je voor Bewerken -> kopiëren om dat gedeelte te kopiëren
Sluit de terminal
Sluit de bestandsbeheerder
Rechtklik op het nieuw aangemaakte icoon en kies voor Eigenschappen
Bij opdracht staat
- Nemo %U
Daarachter plak je het remote adres tussen dubbele aanhalingstekens:
Nemo %U "/run/user/1000/gvfs/sftp:host=popeye/home/mogenblue"
Sluit het Eigenschappen venster
Hernoem het icoon naar ssh popeye home
Kies voor popeye de naam van je eigen remote machine
Klik op het icoon om te openen
Je staat nu in de home map op je remote machine, via ssh.
Klaar.
Bestanden benaderen via ssh op je smartphone of tablet in Android
Op de smartphone en tablet is CX explorer een handige app voor bestandsbeheer. Zowel voor je lokale bestanden als via het draadloze wifi netwerk. Het biedt een reeks aan verbindingsmogelijkheden via het netwerk.
Voor het delen van bestanden via SSH heb je in CX Explorer een SFTP verbinding nodig.
Om zo'n verbinding toe te voegen doe je het volgende:
In CX Explorer klik je op de Tab Netwerk
Klik op de cirkel rechtsonder met een + om een verbinding toe te voegen
Selecteer de tab Remote
Selecteer SFTP
Vul de gegevens in: ip-adres, username en wachtwoord.
Druk op ok.
De mappenlijst van de server verschijnt in beeld.
Klaar.
Je kunt nu vanaf je smartphone browsen door de mappen op de server. Je kunt ook afbeeldingen op de server bekijken en muziek en video bestanden van de server op je smartphone afspelen. En je kunt bestanden up- en downloaden.
Test online status SSH server
Om op een client te controleren of de ssh server online is kan de nmap[4][5] opdracht worden gebruikt.
Als het ip-adres van de server bijvoorbeeld 192.168.1.073 is en de server is online dan ziet de uitvoer in een terminal er ongeveer zo uit:
mogenblue@Brutus ~ $ nmap 192.168.1.073 -p 22 --open --host-timeout 3
Starting Nmap 7.80 ( https://nmap.org ) at 2021-04-20 10:19 CEST
Nmap scan report for 192.168.1.073
Host is up (0.00050s latency).
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds
Als de server niet online is, of een willekeurig ander ip wordt gebruikt, ziet het er zo uit:
mogenblue@Brutus ~ $ nmap 192.168.1.078 -p 22 --open --host-timeout 3
Starting Nmap 7.80 ( https://nmap.org ) at 2021-04-20 10:20 CEST
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 3.03 seconds
SSH werkt gewoonlijk op poort 22. Daarom wordt bij de -p optie deze waarde meegegeven. Daardoor wordt alleen op die poort gescand.
Door de optie --host-timeout zal de opdracht na 3 seconden stoppen met wachten op respons.
Met het volgende script kan de status in een terminal worden gecontroleerd. Het heet test-ssh-status-t.sh en dit staat er in:
#!/bin/bash
# test de status van de ssh host
Host='192.168.1.073'
# ssh via port 22
Port=22
TimeOutSeconden=3
echo .
echo .
echo .
echo .
nmap $Host -p$Port --open --host-timeout $TimeOutSeconden
Je hoeft alleen het ip-adres van de ssh-server in te vullen.
Als alternatief kun je ook een script gebruiken wat een melding op het scherm geeft. Dit heet test-ssh-status-m.sh:
#!/bin/bash
# test de status van de ssh host
Host='192.168.1.073'
# ssh via port 22
Port=22
TimeOutSeconden=3
Service='SSH'
echo .
echo .
echo .
echo .
Status=$(nmap $Host -p $Port --open --host-timeout $TimeOutSeconden | grep 'Host is up')
echo .
echo .
if [[ -z $Status ]]
then
StatusText="$Service Server op ${Host} is niet online"
else
StatusText="$Service Server op ${Host} is online"
fi
zenity --info --height=100 --width=400 --title="Status $Service server" --text="$StatusText"
Je hoeft alleen het ip-adres van de ssh-server in te vullen.
Als de host online is zal de grep[6] opdracht de tekst Host is up vinden in de regel
- Host is up (0.00050s latency).
en dat is de voorwaarde om de status online door te geven. Omdat de zoektekst uit meedere woorden bestaat is deze tussen enkele quotes geplaatst.
De zenity[7] opdracht geeft vervolgens een melding op het scherm. Zenity is een opdracht met uitgebreide mogelijkheden voor input en weergave.
Bij het opslaan van deze scripts moet je bij de Eigenschappen onder de tab Rechten toestaan dat het bestand wordt uitgevoerd als programma.
Beide scripts kunnen met een programmastarter op het buroblad worden geplaatst. Je kunt het icoon bijvoorbeeld veranderen in network-idle. Voor het eerste script met terminal uitvoer moet je bij het aanmaken van de starter aangeven dat de opdracht in een terminal wordt uitgevoerd. Bij die met een melding op het scherm juist niet.
Automatische synchronisatie
Dan gaan we nu verder met twee scripts voor automatische synchronisatie van mappen tussen twee computers. Synchroniseren gebeurt met behulp van de rsync[8][9] opdracht. Om de gebruiker te informeren over de voortgang van de synchronisatie wordt de zenity opdracht gebruikt. Ditmaal als een progress dialog.
We beginnen met het script voor het uploaden van mappen van een lokale computer naar de ssh server.
Uploaden
Het shell script noemen we ssh-popeye-uploaden.sh.
Voor popeye gebruik je de naam van je eigen remote machine
#!/bin/bash
# uploaden, push
# rsync van desktop naar ssh server
# -r, --recursive recurse into directories
# -t, --times preserve modification times
# -u, --update skip files that are newer on the receiver
# -s, --protect-args no space-splitting; wildcard chars only
# -l, --links copy symlinks as symlinks
# --exclude 'PATTERN' exclude files matching PATTERN
# -m, --prune-empty-dirs prune empty directory chains from file-list
# --delete delete extraneous files from dest dirs
# vul hier je eigen gegevens in
User='mogenblue'
Host='popeye'
Opties='-r -t -u -s -l -m --delete'
Bron='/home/mogenblue'
Doel='/home/mogenblue'
#---------------------------------------------------------------------------------
(
echo "# Test online status ssh ${Host} ... -/-"
Status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 ${User}@${Host} echo ok 2>&1)
if [[ $Status == ok ]] ; then
echo "# ${Host} online, doorgaan met uploaden."
else
echo "# ${Host} niet online, uploaden afgebroken."
sleep 5
exit
fi
echo '10'
echo '# Synchroniseren Documenten ... 1/6'
rsync $Opties $Bron/Documenten ${User}@${Host}:$Doel
echo '20'
echo '# Synchroniseren Downloads ... 2/6'
rsync $Opties $Bron/Downloads ${User}@${Host}:$Doel
echo '30'
echo '# Synchroniseren Linux ... 3/6'
rsync $Opties $Bron/Linux ${User}@${Host}:$Doel
echo '40'
echo '# Synchroniseren Afbeeldingen ... 4/6'
rsync $Opties $Bron/Afbeeldingen ${User}@${Host}:$Doel
echo '60'
echo '# Synchroniseren Muziek ... 5/6'
rsync $Opties $Bron/Muziek ${User}@${Host}:$Doel
echo '80'
echo "# Synchroniseren Video's ... 6/6"
rsync $Opties "${Bron}/Video's" ${User}@${Host}:$Doel
echo '100'
echo '# Synchronisatie voltooid.'
# minimaal 1 seconde tonen ter bevestiging van synchroniseren
sleep 1
) |
zenity --progress \
--title="Synchroniseren met ${Host} - push" \
--text="Vergelijken en uploaden ..." \
--percentage=0 \
--auto-close --no-cancel --width=600
Bovenaan in het script staan de variabelen waar je je eigen gegevens moet invullen: de naam van de verbinding, je username en het pad naar je eigen usermap op de lokale en de remote machine.
Je kunt natuurlijk de mappen aanpassen die gesynchroniseerd moeten worden maar let er goed op dat je geen / teken aan het eind een map zet. Dat kan desastreuze gevolgen hebben voor je gegevens. Het kan vrijwel alle mappen op je lokale machine, inclusief het buroblad, verwijderen. Maak dus eerst een BACKUP voor je gaat experimenteren! B-A-C-K-U-P
Downloaden
Het script voor downloaden ziet er iets gecompliceerder uit. Dat noemen we ssh-popeye-downloaden.sh. Voor popeye gebruik je weer de naam van je eigen remote machine
#!/bin/bash
# downloaden, pull
# rsync van ssh server naar desktop
# -r, --recursive recurse into directories
# -t, --times preserve modification times
# -u, --update skip files that are newer on the receiver
# -s, --protect-args no space-splitting; wildcard chars only
# -l, --links copy symlinks as symlinks
# --exclude 'PATTERN' exclude files matching PATTERN
# -m, --prune-empty-dirs prune empty directory chains from file-list
# --delete delete extraneous files from dest dirs
# vul hier je eigen gegevens in
User='mogenblue'
Host='popeye'
# userid is in een terminal op te vragen met id -u username
UserID='1000'
Opties='-r -t -u -s -l -m --delete'
Bron='/home/mogenblue'
Doel='/home/mogenblue'
#---------------------------------------------------------------------------------------
(
echo "# Test online status ssh ${Host} ... -/-"
Status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 ${User}@${Host} echo ok 2>&1)
if [[ $Status == ok ]] ; then
echo "# ${Host} online, doorgaan met downloaden."
else
echo "# ${Host} niet online, downloaden afgebroken."
sleep 5
exit
fi
echo '10'
echo '# Synchroniseren Documenten ... 1/6'
rsync $Opties ${User}@${Host}:$Bron/Documenten $Doel
echo '20'
echo '# Synchroniseren Downloads ... 2/6'
rsync $Opties ${User}@${Host}:$Bron/Downloads $Doel
echo '30'
echo '# Synchroniseren Linux ... 3/6'
rsync $Opties ${User}@${Host}:$Bron/Linux $Doel
echo '40'
echo '# Synchroniseren Afbeeldingen ... 4/6'
rsync $Opties ${User}@${Host}:$Bron/Afbeeldingen $Doel
echo '60'
echo '# Synchroniseren Muziek ... 5/6'
rsync $Opties ${User}@${Host}:$Bron/Muziek $Doel
echo '80'
echo "# Synchroniseren Video's ... 6/6"
rsync $Opties "${User}@${Host}:${Bron}/Video's" $Doel
echo '100'
echo '# Synchronisatie voltooid.'
# minimaal 1 seconde tonen ter bevestiging van synchroniseren
sleep 3
) |
sudo -u $User DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UserID/bus \
zenity --progress \
--title="Synchroniseren met ${Host} - pull" \
--text="Vergelijken en downloaden ..." \
--percentage=0 --pulsate \
--auto-close --no-cancel --width=600
Beide scripts moeten als programma kunnen worden uitgevoerd:
Rechtsklik op het bestand voor het contextmenu.
Selecteer Eigenschappen.
Ga naar de tab Rechten.
Zet een vinkje bij Uitvoeren: Toestaan dat bestand wordt uitgevoerd als programma.
Met deze twee scripts kun je automatisch je lokale mappen synchroniseren met de mappen op de host machine.
Op een 1Gb netwerk gaat dat met ruim 115MB/sec.
Als er niet teveel veranderd is is het binnen 10-15 seconden gebeurd.
Methoden voor synchronisatie
Je kan op drie manieren synchroniseren met de ssh server:
- handmatig: je start elke keer handmatig een script voor uploaden of downloaden;
- op een tijdsinterval: je kunt om de vier uur of op bepaalde tijden synchroniseren;
- bij bepaalde gebeurtenissen: met name bij het ontwaken uit de slaapstand en het overgaan naar de slaapstand toe kun je de mappen laten synchroniseren.
Handmatige synchronisatie
Je kunt voor de eenvoud een snelkoppeling of een snelstarter op het buroblad plaatsen naar de ssh scripts. Het verschil tussen die twee is dat een programmastarter ook in het menu en op de werkbalk kan worden geplaatst. Je kunt voor allebei een ander icoon kiezen dan de standaard. Voor ssh is geen apart icoon beschikbaar, maar je kunt bijvoorbeeld ook die van ftp gebruiken.
Synchronisatie op tijdsinterval
Je kunt er ook voor kiezen om te synchroniseren op bepaalde tijden of om de zoveel uur. Daarvoor kun je je eigen crontab aanpassen met
crontab -e
</pre>
Als je bijvoorbeeld elke 3 uur wilt uploaden kun je de volgende regel gebruiken
<pre>
* */3 * * * /home/mogenblue/scripts/ssh-popeye-uploaden.sh
</pre>
Als je om 11 uur en om 17 uur wilt uploaden kun je dat in één regel schrijven met
<pre>
* 11,17 * * * /home/mogenblue/scripts/ssh-popeye-uploaden.sh
Zo kun je bijvoorbeeld ook om de dag synchroniseren. Met deze Crontab guru kun je eenvoudig een schema opstellen en is erg flexibel.
Synchronisatie op gebeurtenis
Tenslotte kun je ook synchroniseren op bepaalde gebeurtenissen en dan met name op het moment van ontwaken uit de slaapstand van de computer en op het moment dat de computer naar de slaapstand toe gaat. Dit zijn zeer uitgekiende momenten om te synchroniseren omdat je nog niets gedaan hebt wanneer de computer ontwaakt en je helemaal klaar bent wanneer de computer naar de slaapstand toe gaat. Dit is de methode die ik zelf gebruik.
Voor het synchroniseren bij het ontwaken gebruik ik twee scripts. In principe kun je ze in elkaar schuiven, maar ik vind het handiger om ze te splitsen voor het geval ik aan het tweede iets wil veranderen. En als je een backup maakt worden al je scripts meegenomen, maar niet de scripts die in de systeemmappen staan. Die moet je bij een herinstallatie opnieuw daar in zetten.
Voor mogenblue moet je je eigen username gebruiken.
Het eerste script staat in de map /etc/network/if-up.d en het heet computer-network-up-run:
#!/bin/sh
# dit bestand hoort in de map
# /etc/network/if-up.d
# van de ssh client
# het wordt uitgevoerd zodra het netwerk up is
#-----------------------------------------------------------------------------------------------------
# sync user files
sudo -u mogenblue /home/mogenblue/scripts/computer-network-up.sh
Het enige wat dit script dus doet is het tweede aanroepen. Het bijzondere van dit script is dat het automatisch wordt uitgevoerd door het systeem bij het ontwaken uit de slaapstand.
Dit bestand moet als eigenaar en groep root hebben en het moet uitvoerbaar zijn.
Je kunt dit script aanmaken in je lokale scripts map zodat je er een backup van hebt. Dan moet je het daarna naar de juiste map kopiëren en de rechten aanpassen.
Rechts klik voor het context menu
klik op kopiëren
navigeer naar de root directory
rechts klik op /etc map
selecteer openen als beheerder
voer je wachtwoord in
ga naar de map network
ga naar de map if-up.d
plak het bestand in deze map
rechts klik voor het context menu op het bestand
kies eigenschappen
verander onder de tab rechten user en groep naar root.
Het tweede script staat gewoon in je scripts map en heet dus computer-network-up.sh:
#!/bin/bash
# controlebestand
ControleBestand="/home/mogenblue/test-network-up.txt"
WachtSecondenVerwijderen=30
#--------------------------------------------------
# controleer of het script al is uitgevoerd na ontwaken of reboot, 1 keer is genoeg
if [ -e $ControleBestand ]
then
exit
fi
# maak controle bestand om te voorkomen
# dat het script meerdere keren wordt uitgevoerd na ontwaken of reboot
Datum=$(date +%Y/%m/%d_%H:%M:%S.%N) ; Datum=${Datum:0:23}
echo "$Datum: ontwaken controle bestand" >> $ControleBestand
# synchroniseren over ssh, downloaden
source /home/mogenblue/scripts/ssh-popeye-downloaden.sh
# verwijder in de achtergrond het controle bestand na voltooien ontwaken of reboot
(
if [ -e $ControleBestand ]
then
sleep $WachtSecondenVerwijderen
rm $ControleBestand
fi
) &
Dit bestand moet ook uitvoerbaar zijn en mag verder gewoon de rechten van de user hebben.
Het tweede bestand controleert of de synchronisatie is of wordt uitgevoerd en voorkomt dat het nog keer gebeurt. Als het nog niet is uitgevoerd wordt gewoon het script om te downloaden aangeroepen en worden de laatste wijzigingen van de server naar de client gedownload.
Omdat het download script bij het ontwaken oorspronkelijk door root wordt aangeroepen moet het zenity commando op een meer complexe manier worden gestart anders weet het systeem niet waar de output voor het scherm naartoe moet. Daarom staat daar die complexe regel in met username en userid.
Tenslotte het synchroniseren bij het overgaan naar de slaapstand. Uploaden naar de ssh server. Daarvoor hebben we maar één extra bestand nodig: computer-suspend.sh:
#!/bin/bash
# dit script moet worden uitgevoerd op de ssh client
# icoon night-light-symbolic
# controlebestand
ControleBestand="/home/mogenblue/test-network-up.txt"
#--------------------------------------------------
# controleer of het testbestand bestaat en verwijder het dan
if [ -e $ControleBestand ]
then
rm $ControleBestand
fi
# synchroniseren over ssh, uploaden
source /home/mogenblue/scripts/ssh-popeye-uploaden.sh
# slaapstand activeren
systemctl suspend
Dit script doet drie dingen:
- het roept het eigenlijke synchronisatie script voor uploaden aan
- het verwijdert het controle bestand dat voorkomt dat downloaden bij ontwaken twee keer wordt uitgevoerd
- en het roept de slaapstand van de computer aan.
Zoals alle andere scripts moet het uitvoerbaar zijn. Je kunt het met een snelkoppeling of een snelstarter op het buroblad zetten. Het aanbevolen icoon is boven aan het script genoemd.
Dit script kan ook via een sneltoets aan je toetsenbord worden verbonden:
Rechts klik op de werkbalk
kies Systeeminstellingen
ga naar Toetsenbord
kies de tab Sneltoetsen
druk op de knop Voeg aangepaste sneltoets toe
vul een naam in, bijvoorbeeld computer-suspend
selecteer dan bij de opdracht het script computer-suspend.sh
klik op toevoegen
klik dan in het onderste venster toetsenbordbindingen op de eerste regel niet-toegewezen
klik er nogmaals op om een toets te selecteren
druk op de pauze toets op het toetsenbord om deze aan de opdracht te binden
sluit het venster
Klaar.
Druk op de pauze toets om te controleren of het systeem inderdaad gaat uploaden en daarna de slaapstand aanroept.
Bij het ontwaken zou dan het download script moeten worden aangeroepen.
De client computer is nu helemaal geconfigureerd om automatisch te synchroniseren met de ssh server in je netwerk.
Optimaliseren synchronisatie
Synchronisatie tussen client en server gaat in het dagelijks gebruik vrij snel als er niet zoveel veranderd is. Op een 1Gb netwerk is het proces meestal binnen 10 seconden voltooid, maar dat hangt ook af van de snelheid van de processor op de client en server computer en of de router 1Gb op alle ethernetpoorten ondersteunt. Synchronisatie is niet alleen data-overdracht maar ook het vergelijken van de directory structuren op wijzigingen die bepalen hoelang het proces duurt. En daarvoor heb je rekenkracht nodig. Daarvoor heb je een krachtige cpu nodig als je dat wilt versnellen.
De scripts die hier voor synchronisatie zijn gegeven gebruiken niet de volle kracht van modernere cpu's. Deze hebben meestal meer rekenkernen en kunnen 2, 4, 6 of meer processen tegelijk verwerken.
De synchronisatie scripts zijn zo geschreven dat het als één proces wordt uitgevoerd. De opdrachten worden één voor één achter elkaar uitgevoerd en het systeem gaat pas verder met de volgende opdracht wanneer de voorgaande opdracht voltooid is. Dat is op zich al vrij snel, maar met een kleine aanpassing kunnen de rsync opdrachten allemaal tegelijk worden uitgevoerd door de cpu als die meer processen tegelijk kan verwerken.
Als ze allemaal tegelijk worden uitgevoerd wordt de uitvoering van het script verkort tot ongeveer de tijd die de langste synchronisatie opdracht duurt. Meestal is dat de map met afbeeldingen, video's of muziek. En dan benut je de kracht van de cpu maximaal.
De truuk om dit te bereiken is door de rsync opdrachten allemaal naar de achtergrond te sturen[10]. Dan worden ze elk in een eigen achtergrondproces uitgevoerd. Zodra een opdracht is weggestuurd gaat het hoofproces verder met de volgende opdracht. Deze werking bereik je door aan het eind van elke rsync opdracht het ampersand teken (&) toe te voegen. Dat is het signaal aan het systeem om de opdracht in de achtergrond uit te voeren. Aan het eind van de verwerking wordt dan de wait[11] opdracht toegevoegd. Hierdoor zal het systeem op dat punt in het script blijven wachten totdat alle achtergrondprocessen zijn voltooid.
Het gevolg hiervan is dat de process dialog geen zinnige informatie meer kan geven over waar het systeem mee bezig is. Daarom wordt de pulsate optie meegegeven zodat de voortgangsbalk verandert in een pulserende balk. Voor de duidelijkheid aan de eindgebruiker wordt met de sleep opdracht nog 1 seconde gewacht om de melding op het scherm nog enigszins leesbaar te houden. Als je wil kun je die opdracht omzeilen door er een pound teken (#) voor te zetten zodat het een commentaarregel wordt.
Hieronder volgen twee scripts voor een geoptimaliseerde synchronisatie tussen client en server. Push en pull, uploaden en downloaden, met maximaal gebruik van de cpu kracht.
Uploaden geoptimaliseerd
Het shell script voor uploaden noemen we ssh-popeye-uploaden-o.sh.
Voor popeye gebruik je de naam van je eigen remote machine
#!/bin/bash
# geoptimaliseerd uploaden, push
# rsync van desktop naar ssh server
# -r, --recursive recurse into directories
# -t, --times preserve modification times
# -u, --update skip files that are newer on the receiver
# -s, --protect-args no space-splitting; wildcard chars only
# -l, --links copy symlinks as symlinks
# --exclude 'PATTERN' exclude files matching PATTERN
# -m, --prune-empty-dirs prune empty directory chains from file-list
# --delete delete extraneous files from dest dirs
# vul hier je eigen gegevens in
User='mogenblue'
Host='popeye'
Opties='-r -t -u -s -l -m --delete'
Bron='/home/mogenblue'
Doel='/home/mogenblue'
#---------------------------------------------------------------------------------
(
echo "# Test online status ssh ${Host} ... -/-"
Status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 ${User}@${Host} echo ok 2>&1)
if [[ $Status == ok ]] ; then
echo "# ${Host} online, doorgaan met uploaden."
else
echo "# ${Host} niet online, uploaden afgebroken."
sleep 5
exit
fi
echo '# Synchroniseren bestanden ...'
rsync $Opties $Bron/Documenten ${User}@${Host}:$Doel &
rsync $Opties $Bron/Downloads ${User}@${Host}:$Doel &
rsync $Opties $Bron/Linux ${User}@${Host}:$Doel &
rsync $Opties $Bron/Afbeeldingen ${User}@${Host}:$Doel &
rsync $Opties $Bron/Muziek ${User}@${Host}:$Doel &
rsync $Opties "${Bron}/Video's" ${User}@${Host}:$Doel &
echo '# Synchronisatie voltooien ...'
# minimaal 1 seconde tonen ter bevestiging van synchroniseren
sleep 1
wait
) |
zenity --progress \
--title="Synchroniseren met ${Host} - push" \
--text="Vergelijken en uploaden ..." \
--percentage=0 \
--auto-close --no-cancel --width=600
Bovenaan in het script staan de variabelen waar je je eigen gegevens moet invullen: de naam van de verbinding, je username en het pad naar je eigen usermap op de lokale en de remote machine.
Downloaden geoptimaliseerd
Het script voor downloaden noemen we ssh-popeye-downloaden-o.sh. Voor popeye gebruik je weer de naam van je eigen remote machine
#!/bin/bash
# geoptimaliseerd downloaden, pull
# rsync van ssh server naar desktop
# -r, --recursive recurse into directories
# -t, --times preserve modification times
# -u, --update skip files that are newer on the receiver
# -s, --protect-args no space-splitting; wildcard chars only
# -l, --links copy symlinks as symlinks
# --exclude 'PATTERN' exclude files matching PATTERN
# -m, --prune-empty-dirs prune empty directory chains from file-list
# --delete delete extraneous files from dest dirs
# vul hier je eigen gegevens in
User='mogenblue'
Host='popeye'
# userid is in een terminal op te vragen met id -u username
UserID='1000'
Opties='-r -t -u -s -l -m --delete'
Bron='/home/mogenblue'
Doel='/home/mogenblue'
#---------------------------------------------------------------------------------------
(
echo "# Test online status ssh ${Host} ... -/-"
Status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 ${User}@${Host} echo ok 2>&1)
if [[ $Status == ok ]] ; then
echo "# ${Host} online, doorgaan met downloaden."
else
echo "# ${Host} niet online, downloaden afgebroken."
sleep 5
exit
fi
echo '# Synchroniseren bestanden ...'
rsync $Opties ${User}@${Host}:$Bron/Documenten $Doel &
rsync $Opties ${User}@${Host}:$Bron/Downloads $Doel &
rsync $Opties ${User}@${Host}:$Bron/Linux $Doel &
rsync $Opties ${User}@${Host}:$Bron/Afbeeldingen $Doel &
rsync $Opties ${User}@${Host}:$Bron/Muziek $Doel &
rsync $Opties "${User}@${Host}:${Bron}/Video's" $Doel &
echo '# Synchronisatie voltooien ...'
# minimaal 1 seconde tonen ter bevestiging van synchroniseren
sleep 1
wait
) |
sudo -u $User DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UserID/bus \
zenity --progress \
--title="Synchroniseren met ${Host} - pull" \
--text="Vergelijken en downloaden ..." \
--percentage=0 --pulsate \
--auto-close --no-cancel --width=600
Beide scripts moeten als programma kunnen worden uitgevoerd:
Rechtsklik op het bestand voor het contextmenu.
Selecteer Eigenschappen.
Ga naar de tab Rechten.
Zet een vinkje bij Uitvoeren: Toestaan dat bestand wordt uitgevoerd als programma.
Als je de langst durende opdracht boven aan de lijst zet ben je misschien nog wel een tiende van een seconde sneller!!
Herstel bestanden vanuit backup
Als je bestanden vanuit een backup terugzet moet je er rekening mee houden dat deze een oudere datum hebben dan de laatste versie. Daarom kun je niet zomaar synchroniseren om de backup naar de andere computers te krijgen. Want dan wordt de datum vergeleken tussen de versies op de computers en de oudste versie, die je dus net hebt teruggezet, wordt dan overschreven. Dus dan ben je hem meteen weer kwijt.
Daarom moet je bij herstel van bestanden deze handmatig naar de andere computers overzetten. Je kunt ook het oudere bestand openen en opnieuw opslaan. Dan wordt dat het laatst gewijzigde bestand en dan wordt het bij synchroniseren wél over de versies op de andere computers heen geschreven.
Als je een hele map gaat terugzetten geldt dat natuurlijk ook. Voordat je daar aan begint kun je eerst een kopie van die map maken en dan kun je de hele map weggooien en de backup ervoor in de plaats zetten. Dan kun je kijken of daar alle bestanden in staan zoals je dat wil hebben en eventueel bestanden uit je kopie map terugzetten. Als je daarmee klaar bent moet je op de andere computers handmatig die map verwijderen en de herstelde map daar naartoe kopiëren. En pas daarna kun je weer op de normale manier gaan synchroniseren.
Externe Links
- How to Enable SSH on Ubuntu 20.04
- How to Setup Passwordless SSH Login
- Using the SSH Config File
- SSH/OpenSSH/Configuring
- Access FTP server using the Nemo File Manager in Linux Mint
- How to Transfer Files with Rsync over SSH
- How to create a bash script to check the SSH connection?
- How to Show Dialog Box using Shell Script with Examples
- Progress Dialog
Referenties
- ↑ How to Cascade Routers
- ↑ How To Setup a Firewall with UFW on an Ubuntu and Debian Cloud Server
- ↑ arp-scan
- ↑ Checking FTP server online from Bash script?
- ↑ 29 Practical Examples of Nmap Commands for Linux System/Network Administrators
- ↑ How To Use grep Command In Linux / UNIX With Practical Examples
- ↑ Zenity Manual
- ↑ rsync(1) - Linux man page
- ↑ Rsync Command in Linux with Examples
- ↑ How to Run Linux Commands in Background
- ↑ Launch a background process and check when it ends