Tips en Trucs 2017

SSHFS automatisch koppelen bij gebruik

Om een computer vanaf een andere computer te beheren, gebruiken de meeste Linux gebruikers openSSH. Het is eenvoudig te configureren (zie SSH toepassingen) en veilig als je jouw systeem regelmatig bijwerkt (update). Daarenboven moet je geen wachtwoorden onthouden als je SSH sleutels gebruikt (zie Publieke en private SSH sleutels aanmaken). Via de SSH verbinding kan je opdrachten op een andere computer uitvoeren en er bestanden mee uitwisselen. Om bestanden in de grafische omgeving uit te wisselen koppelen we de SSH verbinding automatisch aan het bestandssysteem, maar enkel indien de gebruiker de gekoppelde map opent. Handig om bestanden uit te wisselen met computers die niet altijd ingeschakeld of in de buurt zijn, denk aan draagbare computersystemen.

Manueel koppelen

Zorg er eerst en vooral voor dat openSSH op de computer waarmee je bestanden wilt uitwisselen geconfigureerd is (zie SSH toepassingen). Om gebruiksvriendelijker en veiliger te werken, zorg je dat SSH met sleutels werkt (zie Publieke en private SSH sleutels aanmaken).

Maak een map waaraan je de SSH verbinding naar een andere computer kunt koppelen.

dany@main:~> mkdir -p SSH/Laptop

Met de volgende opdracht koppel je de Persoonlijke map van de gebruiker dany op de computer laptop.local aan de juist aangemaakte map:

dany@main:~> sshfs dany@laptop.local: /home/dany/SSH/Laptop/ -C -o StrictHostKeyChecking=no,follow_symlinks

De -C optie zorgt voor compressie bij het doorsturen van gegevens van de ene naar de andere computer. De optie -o StrictHostKeyChecking=no zorgt ervoor dat je niet telkens moet tussenkomen als het IP adres van uw computer veranderde. En de optie ,follow_symlinks zorgt dat ook snelkoppelingen werken.
Dolhin bestandsbeheerder

De computernaam laptop.local kan je vervangen door het IP-adres van de computer. Nadeel van IP adressen is dat ze in een thuisomgeving regelmatig veranderen. Computernamen kan je enkel gebruiken als de firewall dit toelaat. Toelating geef je met de opdracht:

dany@laptop:~> sudo /sbin/yast2 firewall services add service=service:avahi zone=EXT
root's password:

Daarenboven moet de avahi dienst draaien, maar dit is standaard meestal zo. Controleer of de avahi dienst draait met:

dany@laptop:~> systemctl status avahi-daemon.service
● avahi-daemon.service - Avahi mDNS/DNS-SD Stack
   Loaded: loaded (/usr/lib/systemd/system/avahi-daemon.service; enabled; vendor preset: enabled)
   Active: active (running) since za 2017-06-03 14:59:04 CEST; 36min ago
 Main PID: 925 (avahi-daemon)
   Status: "Server startup complete. Host name is laptop.local. Local service cookie is 3438160986."
    Tasks: 1 (limit: 512)
   CGroup: /system.slice/avahi-daemon.service
           └─925 avahi-daemon: running [laptop.local]

Indien de avahi dienst niet actief is, kan je deze met de volgende opdracht starten:

dany@laptop:~> sudo systemctl start avahi-daemon.service
root's password:

En/of automatisch bij het opstarten van de computer laten starten met de opdracht:

dany@laptop:~> sudo systemctl enable avahi-daemon.service

En dit natuurlijk het liefst op alle computers in huis.

De SSH vebinding met de andere computer verbreek je met de opdracht:

dany@main:~> fusermount -u /home/dany/SSH/Laptop

Een map altijd automatisch koppelen aan een SSH verbinding

Via het bestand /etc/fstab bepaal je welke mappen gekoppeld worden aan welke apparaten. Door de volgende regel toe te voegen, voer je bovenstaande koppeling automatisch bij het starten van de computer uit.

dany@laptop.local:/home/dany /home/dany/SSH/Laptop  fuse.sshfs users,idmap=user,StrictHostKeyChecking=no,IdentityFile=/home/dany/.ssh/id_rsa,allow_other,_netdev,follow_symlinks,default_permissions,uid=1000,gid=100 0 0

Controleer bij het aanpassen van het bestand /etc/fstab steeds of je geen fouten in staan, /etc/fstab wordt namelijk bij het opstarten van uw systeem gebruikt, als dit fouten bevat, kan uw systeem daardoor vastlopen. Je controleert de werking van het /etc/fstab bestand met de opdracht:

dany@main:~> sudo mount -a
root's password:

Krijg je geen foutmeldingen, dan verliep alles goed en is de map aan de SSH verbinding gekoppeld. Kreeg je wel een foutmelding verbeter deze dan voor je de computer herstart en test opnieuw. Herhaal dit tot /etc/fstab correct werkt. Bij elke computerstart wordt de map nu automatisch aan de SSH verbinding gekoppeld. Indien de andere computer niet via SSH bereikbaar is, worden de pogingen om te koppelen na een tijdje (timeout) opgegeven en is de map niet gekoppeld.

Daar /etc/fstab door de root gebruiker wordt verwerkt, gebruiken we extra opties. Zo zorgt de optie users ervoor dat andere gebruikers de map kunnen afkoppelen. De optie idmap zorgt voor een correcte omschakeling tussen de gebruikers op beide systemen. Aangezien we de sleutels van de gebruiker dany nodig hebben en niet die van de root-gebruiker, geef je locatie van de te gebruiken sleutels op met de optie IdentityFile=/home/dany/.ssh/id_rsa. De allow_other optie zorgt dat ook niet root-gebruikers lees- en schrijfrechten hebben. Door de optie _netdev wordt het systeem op de hoogte gebracht van het feit dat het hier gaat om een netwerkverbinding en geen fysiek aangesloten apparaat. Met de optie default_permissions geef je de kernel toestemming om de rechten op het bestandssysteem op de andere computer te controleren, waardoor enkel degene met toestemming bepaalde bewerkingen mag uitvoeren. De gebruikers- en groepsID van de gekoppelde map geef je op met de opties uid=1000,gid=100. Deze kan je opvragen met de opdracht:

dany@main:~> id dany
UID=1000(dany) GID=100(users) groepen=100(users)

Met sudo mount -a kan je de map manueel koppelen. Bijvoorbeeld na een mislukte automatische koppeling. Manueel afmelden doe je met de opdracht:

dany@main:~> sudo umount /home/dany/SSH/Laptop 
root's password:

Een map pas bij het openen ervan koppelen aan een SSH verbinding

Om de map pas te koppelen als je ze opent of gebruikt, kan door aan de /etc/fstab regel een paar opties toe te voegen:

dany@laptop.local:/home/dany /home/dany/SSH/Laptop  fuse.sshfs users,idmap=user,StrictHostKeyChecking=no,IdentityFile=/home/dany/.ssh/id_rsa,allow_other,noauto,x-systemd.automount,_netdev,follow_symlinks,default_permissions,uid=1000,gid=100 0 0

Hierbij zorgt de optie noauto ervoor dat de koppeling niet bij het opstarten van de computer gemaakt wordt. De optie x-systemd.automount zorgt dat de koppeling bij het openen van de map gemaakt wordt. Na de aanpassing test je het /etc/fstab bestand met

dany@main:~> sudo mount -a
root's password:

Deze keer gebruiken we deze opdracht enkel om het /etc/fstab bestand op eventuele fouten te controleren. De koppeling werkt pas na het herstarten van de computer. De volgende opdracht toont dat de koppeling klaar staat om uitgevoerd te worden, maar de koppeling nog niet werd aangemaakt (laatste regel):

dany@main:~> mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
...
dany@laptop.local:/home/dany on /home/dany/SSH/Laptop type fuse.sshfs (rw,nosuid,nodev,noexec,relatime,user_id=0,group_id=0,default_permissions,allow_other)

Pas na het openen van de map SSH/Laptop wordt de koppeling gemaakt:

dany@main:~> mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
...
systemd-1 on /home/dany/SSH/Laptop type autofs (rw,relatime,fd=42,pgrp=1,timeout=0,minproto=5,maxproto=5,direct)
...
dany@laptop.local:/home/dany on /home/dany/SSH/Laptop type fuse.sshfs (rw,nosuid,nodev,noexec,relatime,user_id=0,group_id=0,default_permissions,allow_other,_netdev)

Indien de SSH verbinding niet tot stand kan komen, lijkt het alsof het bestandssysteem geblokkeerd is. Er wordt een lange tijd (timeout) geprobeerd om een SSH verbinding op te bouwen. En dit gebeurt niet alleen als je zelf de map opent, ook als het systeem de map opent om bijvoorbeeld een zoekopdracht uit te voeren, of een back-up te maken, enz. Geautomatiseerde taken hebben dus soms ook wel nadelige gevolgen.