File-sharing via SSH in je thuisnetwerk

Dit is en alleen lezen onderdeel.
Gebruikersavatar
Mogenblue
Held
Held
Berichten: 351
Lid geworden op: Wo 18 Okt 2017, 08:27
Locatie: Amsterdam

File-sharing via SSH in je thuisnetwerk

Berichtdoor Mogenblue » Ma 08 Mar 2021, 12:11

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.
Met ssh kun je onder meer veilig bestanden delen en overzetten via sftp. En dat is het onderwerp van dit artikel.

In deze post 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 buroblad 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.

-------------------------------------------------------------------------------------------------------------------------------------------
Door technische problemen is een klein stukje uit het eerste deel van de beschrijving verloren gegaan.
* Kijk op de LMNL wiki voor de bijgewerkte versie.
Gebruikersavatar
Mogenblue
Held
Held
Berichten: 351
Lid geworden op: Wo 18 Okt 2017, 08:27
Locatie: Amsterdam

Re: File-sharing via SSH in je thuisnetwerk

Berichtdoor Mogenblue » Ma 08 Mar 2021, 12:24

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 dus 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:

Code: Selecteer alles

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.
Laatst gewijzigd door Mogenblue op Ma 08 Mar 2021, 12:41, 1 keer totaal gewijzigd.
Gebruikersavatar
Mogenblue
Held
Held
Berichten: 351
Lid geworden op: Wo 18 Okt 2017, 08:27
Locatie: Amsterdam

Re: File-sharing via SSH in je thuisnetwerk

Berichtdoor Mogenblue » Ma 08 Mar 2021, 12:28

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 veiligheidsredenene automatisch na een bepaalde tijd verbroken. Maar je kunt gewoon op de bladwijzer klikken en dan wordt de verbinding automatisch hersteld.
Makkelijker kan het niet.


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@EnigmaMachine /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
Rechtsklik 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 netwerk. Het biedt een reeks aan verbindingsmogelijkheden via het netwerk.
Voor het delen van bestanden via SSH heb je in CX Expolorer 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.
Gebruikersavatar
Mogenblue
Held
Held
Berichten: 351
Lid geworden op: Wo 18 Okt 2017, 08:27
Locatie: Amsterdam

Re: File-sharing via SSH in je thuisnetwerk

Berichtdoor Mogenblue » Ma 08 Mar 2021, 12:31

Automatische synchronisatie

Dan gaan we nu verder met twee scripts voor automatische synchronisatie van mappen tussen twee computers.
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.
Voor popeye gebruik je de naam van je eigen remote machine

Code: Selecteer alles

#!/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


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

Code: Selecteer alles

#!/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.

Voor de methoden om te synchroniseren heb ik al eerder een post gemaakt. Die kun je hier doorlezen:
Methoden voor synchronisatie
Laatst gewijzigd door Mogenblue op Ma 08 Mar 2021, 12:44, 1 keer totaal gewijzigd.
Gebruikersavatar
emvedeesje
Guru
Guru
Berichten: 762
Lid geworden op: Zo 17 Jun 2018, 11:03
Locatie: Aalter-Ovl-Belgie

Re: File-sharing via SSH in je thuisnetwerk

Berichtdoor emvedeesje » Di 09 Mar 2021, 10:48

@Mogenblue
Bedankt voor deze ver uitgediepte beschrijving.
Ik heb de link naar deze topic toegevoegd aan mijn nota' over SSH.

Mijn wensen liggen (nog) niet in synchroniseren van bepaalde data van twee computers.

Ik gebruik SSH enkel om occasioneel iets van een andere computer binnen te halen, of naartoe te sturen.
Daarvoor werk ik met de Firewall vanuit het menu, waar ik rules heb toegevoegd voor SSH.
Koppelen doe ik met Nemo vanuit het menu.
Werkt zeer goed.

Een tip kan nog toegevoegd worden:
Elke verbinding waarmee geprobeerd wordt te verbinden, wordt als een geëncrypteerde sleutel opgeslagen in:
/home/gebruiker/.ssh/known_hosts
Indien een fout IP-adres ingegeven was, of er is nu een ander IP-adres nodig om een computer te verbinden, dan komt de boodschap: Controle van hostsleutel mislukt, en je kan niet meer verder.
OPLOSSING: wis het boven vermelde bestand.


En inderdaad: zorg voor vaste IP-adressen, dat vergemakkelijkt het inloggen.

groeten van Michael
Mint cinnamon fan
Mint cinnamon-21.3 (vorige linux: LMDE-5 / Mint cinnamon-20+19+18+17 / Ubuntu-16+14+12)
Gebruikersavatar
Mogenblue
Held
Held
Berichten: 351
Lid geworden op: Wo 18 Okt 2017, 08:27
Locatie: Amsterdam

Re: File-sharing via SSH in je thuisnetwerk

Berichtdoor Mogenblue » Di 09 Mar 2021, 15:57

Dank je Michael.

Ik heb gemerkt dat rsync via sftp beter werkt dan het mirror commando in lftp.
Dat bleek met name toen ik geplande backups ging maken op een extra interne schijf via BackInTime. Om het uur wordt er nu automatisch een backup geschreven. Maar het mirror commando ziet dan niet meer wat er veranderd is. Terwijl het rsync commando het nog gewoon goed doet.
Dus wat dat betreft gaat synchronisatie tussen computers voor mij voortaan via ssh.

Aan de andere kant heb ik de indruk dat bestandsoverdracht van de smartphone naar de computer via ftp sneller is dan via sftp. Het hangt ook van het model van je smartphone af en hoe oud hij is. Maar voor draadloos blijf ik toch nog liever met ftp werken als ik veel bestanden moet overzetten.

Ik heb geprobeerd om handmatig de regels voor de firewall aan te passen, maar dat ging bij mij niet goed. Voor mij is UFW echt een uitkomst.

Ik heb het known_hosts bestand bekeken. Is echt geen touw aan vast te knopen hè? ;)
Gewoon wegdonderen die handel. :D :D :D

Groeten,
Frits
Gebruikersavatar
Mogenblue
Held
Held
Berichten: 351
Lid geworden op: Wo 18 Okt 2017, 08:27
Locatie: Amsterdam

Re: File-sharing via SSH in je thuisnetwerk

Berichtdoor Mogenblue » Ma 12 Apr 2021, 11:32

Deze post is nu ook beschikbaar op de LinuxMintNL Wiki:

File-sharing en synchronisatie via SSH in je thuisnetwerk

De scripts zijn beter gepimpt en de tekst is hier en daar een beetje glad gestreken. Daar kun je zoveel en zolang redigeren als je wil, hier niet.

Terug naar “Archief”

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers en 1 gast