# SSHFS

```
sshfs user@domain.net:/ /mnt/storagebox
```

Det här är ett dokument som beskriver användning av SSHFS för att montera en fjärrdisk över SSH på Turnkey Fileserver.

Installera sshfs:

```
apt update
apt install sshfs
```

Skapa en monteringspunkt:

```
mkdir -p /mnt/storagebox
```

Testa först manuell montering:

```
sshfs user@storage.domain.net:/ /mnt/storage
```

Används en annan port än 22 kan ex. `-p 23` läggas till i kommandot.

För automatisk inloggning utan användarnamn + lösenord hos fjärrservern bör SSH-nycklar användas. Lägg över ssh-nyckeln med:

```
ssh-copy-id -p 23 -s user@storage.domain.net
```

Prova sen att SSHa och se om automagisk inloggning lirade.

Man kan prova att montera disken manuellt innan fstab uppdateras, se exempel:

```
sshfs -p 23 -o allow_other,uid=0,gid=0,IdentityFile=/root/.ssh/id_rsa,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 user@user.storage.domain.net:. /mnt/storage
```

Modifiera /etc/fstab med montering. Exempel:

```
#webdav
https://user.storage.domain.net /mnt/webdav davfs _netdev,user 0 0

#sshfs
sshfs#user@user.stoage.domain.net:/ /mnt/storage fuse defaults,_netdev,allow_other,uid=0,gid=0,IdentityFile=/root/.ssh/id_rsa,port=23,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 0 0

```

Starta sedan om daemon med:

```
systemctl daemon-reload
```

Montera nu med:

```
mount -a
```

Behöver man avmontera gör man det med `umount /mnt/storage`. Får man felmeddelande så lägg till -l flaggan.

Jag fick dock inte ovan att fungera. ChatGPT föreslog istället att bygga en systemd-tjänst som löser det. Se dokumentation nedan:

# Dokumentation: systemd-service för SSHFS-mount av Storagebox

## Översikt

Denna systemd-service monterar en fjärrlagring (Storagebox) från Hetzner via SSHFS till en lokal mapp på servern. Den använder SSH-nyckelautentisering med port 23 och har stöd för automatisk återanslutning vid nätverksavbrott.

<div class="_tableContainer_1rjym_1" id="bkmrk--1"><div class="_tableWrapper_1rjym_13 group flex w-fit flex-col-reverse" tabindex="-1">---

</div></div>## Filstruktur och viktiga komponenter

<div class="_tableContainer_1rjym_1" id="bkmrk-fil%2Fplats-beskrivnin"><div class="_tableWrapper_1rjym_13 group flex w-fit flex-col-reverse" tabindex="-1"><div class="_tableContainer_1rjym_1"><div class="_tableWrapper_1rjym_13 group flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="992" data-start="459"><thead data-end="541" data-start="459"><tr data-end="541" data-start="459"><th data-col-size="md" data-end="489" data-start="459">Fil/Plats</th><th data-col-size="md" data-end="541" data-start="489">Beskrivning</th></tr></thead><tbody data-end="992" data-start="624"><tr data-end="728" data-start="624"><td data-col-size="md" data-end="663" data-start="624">`/usr/local/bin/mount-storagebox.sh`</td><td data-col-size="md" data-end="728" data-start="663">Skript som utför monteringen med `sshfs` och rätt alternativ.</td></tr><tr data-end="826" data-start="729"><td data-col-size="md" data-end="778" data-start="729">`/etc/systemd/system/mount-storagebox.service`</td><td data-col-size="md" data-end="826" data-start="778">systemd-servicefil som styr monteringen.</td></tr><tr data-end="909" data-start="827"><td data-col-size="md" data-end="858" data-start="827">`/mnt/storagebox`</td><td data-col-size="md" data-end="909" data-start="858">Lokalt mount-point där Storagebox monteras.</td></tr><tr data-end="992" data-start="910"><td data-col-size="md" data-end="941" data-start="910">`/root/.ssh/id_rsa`</td><td data-col-size="md" data-end="992" data-start="941">Privat SSH-nyckel som används för autentisering.</td></tr></tbody></table>

</div></div></div></div>```
root@turnkey-fileserver ~# cat /usr/local/bin/mount-storagebox.sh
#!/bin/bash
exec /usr/bin/sshfs -p 23 \
  -o allow_other,uid=0,gid=0,reconnect,IdentityFile=/root/.ssh/id_rsa,StrictHostKeyChecking=accept-new \
  -o ssh_command="ssh -vvv -p 23" \
  user@user.storage.domain.net:. /mnt/storage

root@turnkey-fileserver ~# cat /etc/systemd/system/mount-storagebox.service
[Unit]
Description=Mount Storagebox SSHFS via script
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/mount-storagebox.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target



```


## Hur systemd-servicen fungerar

1. **Start:**  
    Vid start kör systemd servicen skriptet `/usr/local/bin/mount-storagebox.sh`.
2. **Montering:**  
    Skriptet kör `sshfs` med följande nyckelparametrar:
    
    
    - Använder användaren `user` och port `23` för SSH-anslutningen.
    - Autentisering sker via `/root/.ssh/id_rsa` (SSH-nyckel).
    - Montering sker mot fjärrkatalogen (hemkatalog `.` på servern).
    - Mount sker i `/mnt/storagebox`.
    - Flera SSHFS-alternativ används, t.ex. `allow_other`, `reconnect`, `uid=0`, `gid=0`, `StrictHostKeyChecking=accept-new` för att säkerställa stabilitet och rättigheter.
    - SSH debug loggning kan aktiveras via `ssh_command="ssh -vvv -p 23"` för felsökning.
3. **Felhantering:**
    
    
    - Om anslutningen bryts försöker SSHFS automatiskt reconnect (`reconnect`).
    - Servicen rapporterar fel i `journalctl` vid misslyckad mount.
4. **Automatisering:**
    
    
    - Servicen kan startas vid boot med `systemctl enable mount-storagebox.service`.
    - Manuell start/stopp med `systemctl start|stop mount-storagebox.service`.

## Viktiga kommandon

- Starta servicen manuellt:
    
    systemctl start mount-storagebox.service
    
    Stoppa servicen:
    
    systemctl stop mount-storagebox.service
    
    Kontrollera status och loggar:
    
    systemctl status mount-storagebox.service  
    journalctl -u mount-storagebox.service -f
    
    Aktivera autostart vid boot:
    
    systemctl enable mount-storagebox.service

## Säkerhets- och rättighetsaspekter

- SSH-nyckeln måste vara korrekt sparad i `/root/.ssh/id_rsa` och ha rätt filrättigheter (typ 600).
- Mount-punkten `/mnt/storagebox` bör ägas av root och ha korrekta åtkomsträttigheter.
- Använd `allow_other` för att tillåta andra användare än root att läsa/skriva i monterad katalog, vilket kräver `user_allow_other` i `/etc/fuse.conf`.

## Felsökning

- Vid problem, kolla systemd-loggar:
    
    journalctl -xeu mount-storagebox.service
    
    Testa manuellt mount via skriptet:
    
     /usr/local/bin/mount-storagebox.sh
    
     Kontrollera att SSH-nyckeln fungerar och att port 23 är tillgänglig.
    
     Kontrollera att mappen /mnt/storagebox är tom och inte används av någon annan mount.
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">  
    </div>

## NFS

Jag gjorde sedan filtjänsten nåbar över NFS för det lokala nätverket.

apt update  
apt install nfs-kernel-server

Redigera /etc/exports.

```
/mnt/storagebox 10.0.2.2(rw,sync,no_subtree_check,fsid=3,no_root_squash) 10.0.2.34(rw,sync,no_subtree_check,fsid=3,no_root_squash)

```

Ladda om NFS-exporter. `exportfs -ra`. Kontrollera med `exportfs -v`.