SCP (Secure Copy) und SFTP (SSH File Transfer Protocol) ermöglichen verschlüsselte Dateiübertragung über SSH. Sie sind die sichere Alternative zu FTP.

SCP

Grundlagen

# Lokale Datei auf Server kopieren
scp datei.txt user@server:/pfad/

# Datei vom Server holen
scp user@server:/pfad/datei.txt ./

# Mit anderem Port
scp -P 2222 datei.txt user@server:/pfad/

Verzeichnisse

# Verzeichnis rekursiv kopieren
scp -r /lokales/verzeichnis user@server:/pfad/

# Vom Server
scp -r user@server:/pfad/verzeichnis ./

Optionen

# Verbose (Fortschritt)
scp -v datei.txt user@server:/pfad/

# Kompression
scp -C datei.txt user@server:/pfad/

# Berechtigungen erhalten
scp -p datei.txt user@server:/pfad/

# Bandbreite begrenzen (KBit/s)
scp -l 1000 large.zip user@server:/pfad/

# SSH-Key angeben
scp -i ~/.ssh/mykey datei.txt user@server:/pfad/

# Kombiniert
scp -rpC -P 2222 /data user@server:/backup/

Zwischen Servern

# Direkt zwischen zwei Servern
scp user1@server1:/pfad/datei.txt user2@server2:/pfad/

# Über lokalen Rechner (bei Firewall)
scp -3 user1@server1:/pfad/datei.txt user2@server2:/pfad/

SFTP

Interaktiv

# Verbinden
sftp user@server

# Mit Port
sftp -P 2222 user@server

# Mit SSH-Key
sftp -i ~/.ssh/mykey user@server

SFTP-Befehle

# Nach Verbindung:

# Verzeichnis-Navigation
pwd                  # Remote-Verzeichnis
lpwd                 # Lokales Verzeichnis
cd /pfad             # Remote wechseln
lcd /pfad            # Lokal wechseln
ls                   # Remote auflisten
lls                  # Lokal auflisten

# Upload
put datei.txt
put -r verzeichnis/
mput *.txt           # Mehrere Dateien

# Download
get datei.txt
get -r verzeichnis/
mget *.txt           # Mehrere Dateien

# Dateiverwaltung
mkdir verzeichnis
rmdir verzeichnis
rm datei.txt
rename alt neu
chmod 644 datei.txt
chown user datei.txt

# Beenden
exit
bye
quit

Batch-Modus

# Befehle aus Datei
sftp -b commands.txt user@server

# commands.txt:
# cd /var/www
# put index.html
# chmod 644 index.html
# exit

Einzeiler

# Einzelne Datei
echo "get /pfad/datei.txt" | sftp user@server

# Mit Kommando
sftp user@server:/pfad/datei.txt ./

# Mehrere Befehle
sftp user@server << EOF
cd /var/www
put index.html
chmod 644 index.html
EOF

SSH-Konfiguration

~/.ssh/config

# Häufig genutzte Server
Host webserver
    HostName 192.168.1.10
    User deploy
    Port 22
    IdentityFile ~/.ssh/deploy_key

Host backup
    HostName backup.example.de
    User backupuser
    Port 2222
    IdentityFile ~/.ssh/backup_key
# Dann einfach:
scp datei.txt webserver:/var/www/
sftp backup

Vergleich

| Feature | SCP | SFTP | |---------|-----|------| | Interaktiv | Nein | Ja | | Resume | Nein | Ja | | Verzeichnis-Liste | Nein | Ja | | Dateiverwaltung | Nein | Ja | | Performance | Schneller | Etwas langsamer | | Scripting | Einfach | Batch-Modus |

Praktische Beispiele

Backup-Script

#!/bin/bash
# Remote Backup

DATE=$(date +%Y%m%d)
SERVER="backup@backup.example.de"
REMOTE_PATH="/backup/"

# Archiv erstellen
tar -czvf /tmp/backup-$DATE.tar.gz /var/www/

# Hochladen
scp /tmp/backup-$DATE.tar.gz $SERVER:$REMOTE_PATH

# Lokal löschen
rm /tmp/backup-$DATE.tar.gz

echo "Backup fertig"

Sync mit rsync

# Für große Übertragungen rsync bevorzugen
rsync -avz -e ssh /lokaler/pfad/ user@server:/remote/pfad/

# Vorteile gegenüber SCP:
# - Inkrementell (nur Änderungen)
# - Fortsetzen möglich
# - Delta-Transfer

SFTP-Only User

# /etc/ssh/sshd_config
Match User sftpuser
    ChrootDirectory /home/sftpuser
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no
    PermitTunnel no

# Verzeichnis vorbereiten
mkdir -p /home/sftpuser/upload
chown root:root /home/sftpuser
chmod 755 /home/sftpuser
chown sftpuser:sftpuser /home/sftpuser/upload

GUI-Clients

- FileZilla (plattformübergreifend)
- WinSCP (Windows)
- Cyberduck (Mac/Windows)
- Nautilus/Dolphin (sftp://user@server)

Troubleshooting

Häufige Probleme

# Connection refused
# → SSH-Service läuft?
systemctl status sshd

# Permission denied
# → Berechtigungen und User prüfen
# → SSH-Key korrekt?

# Host key verification failed
# → Known hosts prüfen
ssh-keygen -R hostname

# Slow connection
# → DNS-Lookup deaktivieren
# /etc/ssh/sshd_config: UseDNS no

Debug

# Verbose Mode
scp -v datei.txt user@server:/pfad/
sftp -v user@server

# Sehr verbose
scp -vvv datei.txt user@server:/pfad/

Zusammenfassung

| Befehl | Funktion | |--------|----------| | scp datei user@host:/pfad | Upload | | scp user@host:/pfad/datei . | Download | | scp -r | Rekursiv | | scp -P | Port angeben | | sftp user@host | Interaktiv | | sftp -b | Batch-Modus |

| SFTP-Befehl | Funktion | |-------------|----------| | put | Upload | | get | Download | | ls/lls | Auflisten | | cd/lcd | Wechseln | | rm/mkdir | Verwalten |

Fazit

SCP ist ideal für schnelle, einfache Dateiübertragungen. SFTP bietet mehr Funktionen für interaktive Arbeit. Beide nutzen SSH-Verschlüsselung. Für regelmäßige Synchronisation ist rsync besser geeignet. SSH-Config vereinfacht die Arbeit mit mehreren Servern.