SFTP-Zugang zu /shared für große Dateien (Skript für Pascal, Anleitung für Lara)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
3639a053ba
commit
afc9c39148
3 changed files with 125 additions and 0 deletions
|
|
@ -87,6 +87,32 @@ Start einer Sitzung und bei jedem Prompt. Die Nachrichten liegen im Volume
|
||||||
Ihr könnt Claude auch direkt bitten, z. B.: „Schreib Lara ins Postfach,
|
Ihr könnt Claude auch direkt bitten, z. B.: „Schreib Lara ins Postfach,
|
||||||
dass die Startseite überarbeitet ist."
|
dass die Startseite überarbeitet ist."
|
||||||
|
|
||||||
|
## Dateien hochladen (SFTP zu `/shared`)
|
||||||
|
|
||||||
|
Für große Dateien vom eigenen Rechner (Videos, Hörproben) gibt es einen
|
||||||
|
reinen SFTP-Zugang: nur Dateien, keine Shell, kein Docker, eingesperrt auf
|
||||||
|
`/shared`. Er startet im Eingangsordner `/shared/youtube/upload`.
|
||||||
|
|
||||||
|
**Einrichten (Pascal, einmalig je Person):** Die Person erzeugt einen
|
||||||
|
Schlüssel (siehe `ONBOARDING_LARA.md`, Abschnitt 9) und schickt den
|
||||||
|
**öffentlichen** Teil (`.pub`). Dann auf dem Server:
|
||||||
|
```
|
||||||
|
scp claude-remote/sftp-upload.sh <server>:~/claude-stack/ # oder nach dem Kopieren von claude-remote/
|
||||||
|
ssh <server>
|
||||||
|
sudo bash ~/claude-stack/sftp-upload.sh "ssh-ed25519 AAAA… lara"
|
||||||
|
```
|
||||||
|
Das Skript legt den Nutzer `lara-upload` an (Gruppe wie die Container, damit
|
||||||
|
hochgeladene Dateien dort beschreibbar sind), hängt das Volume
|
||||||
|
`claude_shared` unter `/srv/sftp/lara-upload/shared` ein (Eintrag in
|
||||||
|
`/etc/fstab`) und schreibt `/etc/ssh/sshd_config.d/sftp-lara-upload.conf`.
|
||||||
|
Es prüft die sshd-Konfiguration vor dem Neuladen. Port 22 wie bei deinem
|
||||||
|
SSH-Zugang.
|
||||||
|
|
||||||
|
**Schlüssel tauschen:** Skript mit dem neuen Schlüssel erneut ausführen.
|
||||||
|
**Entfernen:** `/etc/ssh/sshd_config.d/sftp-lara-upload.conf` löschen,
|
||||||
|
`systemctl reload ssh`, Zeile in `/etc/fstab` entfernen,
|
||||||
|
`umount /srv/sftp/lara-upload/shared`, `userdel lara-upload`.
|
||||||
|
|
||||||
## Betrieb
|
## Betrieb
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -123,3 +123,37 @@ So arbeitest du damit:
|
||||||
`/shared/youtube/`, nicht ins Git.
|
`/shared/youtube/`, nicht ins Git.
|
||||||
- **Nutzungslimit:** Du nutzt dein eigenes Claude-Kontingent. Lange
|
- **Nutzungslimit:** Du nutzt dein eigenes Claude-Kontingent. Lange
|
||||||
Video- oder Recherche-Aufgaben verbrauchen viel davon.
|
Video- oder Recherche-Aufgaben verbrauchen viel davon.
|
||||||
|
|
||||||
|
## 9. Große Dateien auf den Server hochladen (SFTP)
|
||||||
|
|
||||||
|
Videos, Hörproben und Rohmaterial gehören nach `/shared/youtube/` auf dem
|
||||||
|
VPS, damit Pascal und beide Claude-Container sie sehen. Dafür gibt es einen
|
||||||
|
reinen Datei-Zugang (kein Server-Login).
|
||||||
|
|
||||||
|
**Einmalig: Schlüssel erzeugen** (Windows, Eingabeaufforderung `cmd`):
|
||||||
|
```
|
||||||
|
ssh-keygen -t ed25519 -f %USERPROFILE%\.ssh\pino_upload -C lara
|
||||||
|
type %USERPROFILE%\.ssh\pino_upload.pub
|
||||||
|
```
|
||||||
|
Die angezeigte Zeile (`ssh-ed25519 AAAA… lara`) ist der **öffentliche**
|
||||||
|
Schlüssel – den schickst du Pascal (darf in Chat/Postfach). Die Datei
|
||||||
|
**ohne** `.pub` bleibt bei dir und wird nie weitergegeben. Pascal richtet
|
||||||
|
damit den Zugang ein.
|
||||||
|
|
||||||
|
**Hochladen:**
|
||||||
|
```
|
||||||
|
sftp -i %USERPROFILE%\.ssh\pino_upload lara-upload@larpaso.de
|
||||||
|
put -r "C:\Users\lk-lo\Pino-Kanal\Stimmen-Entwuerfe"
|
||||||
|
bye
|
||||||
|
```
|
||||||
|
Du landest im Ordner `upload`; die Dateien liegen danach in
|
||||||
|
`/shared/youtube/upload/` (in den Claude-Containern genauso). Mit `ls`
|
||||||
|
siehst du, was da ist, mit `get` holst du Dateien vom Server. Lieber mit
|
||||||
|
der Maus: [WinSCP](https://winscp.net), Protokoll SFTP, Rechner
|
||||||
|
`larpaso.de`, Benutzer `lara-upload`, unter „Erweitert → SSH →
|
||||||
|
Authentifizierung“ die Schlüsseldatei wählen (WinSCP bietet an, sie
|
||||||
|
umzuwandeln).
|
||||||
|
|
||||||
|
Arbeitest du mit Claude auf deinem PC, kann Claude das auch für dich
|
||||||
|
erledigen („lade den Ordner … nach /shared/youtube/upload hoch“).
|
||||||
|
|
||||||
|
|
|
||||||
65
claude-remote/sftp-upload.sh
Normal file
65
claude-remote/sftp-upload.sh
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# Richtet einen reinen SFTP-Zugang zum gemeinsamen Ordner /shared der
|
||||||
|
# Claude-Container ein (für große Dateien: Videos, Audio, Hörproben).
|
||||||
|
# Keine Shell, kein Docker, nur Dateien hoch- und herunterladen.
|
||||||
|
#
|
||||||
|
# sudo bash sftp-upload.sh "ssh-ed25519 AAAA… lara" Nutzer lara-upload
|
||||||
|
# sudo bash sftp-upload.sh "ssh-ed25519 AAAA… …" anderer-name
|
||||||
|
#
|
||||||
|
# Nochmal ausführen ersetzt den Schlüssel. Entfernen siehe DEPLOYMENT_CLAUDE.md.
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SCHLUESSEL=${1:?Öffentlichen SSH-Schlüssel (Inhalt der .pub-Datei) angeben}
|
||||||
|
NUTZER=${2:-lara-upload}
|
||||||
|
VOLUME=/var/lib/docker/volumes/claude_shared/_data
|
||||||
|
CHROOT=/srv/sftp/$NUTZER
|
||||||
|
|
||||||
|
[[ $SCHLUESSEL == ssh-* || $SCHLUESSEL == ecdsa-* ]] || { echo "Das sieht nicht nach einem öffentlichen Schlüssel aus (ssh-ed25519 …)."; exit 1; }
|
||||||
|
[ -d "$VOLUME" ] || { echo "Volume $VOLUME fehlt – läuft der Claude-Stack?"; exit 1; }
|
||||||
|
|
||||||
|
# Gleiche Gruppe wie die Dateien im Volume (Container-Nutzer node, gid 1000),
|
||||||
|
# damit hochgeladene Dateien in den Containern les- und schreibbar sind.
|
||||||
|
GID=$(stat -c %g "$VOLUME")
|
||||||
|
getent group "$GID" >/dev/null || groupadd -g "$GID" claude-shared
|
||||||
|
id "$NUTZER" >/dev/null 2>&1 || useradd --system --no-create-home --home-dir / --shell /usr/sbin/nologin -g "$GID" "$NUTZER"
|
||||||
|
|
||||||
|
# Chroot muss root gehören; darin /shared als Bind-Mount auf das Volume
|
||||||
|
install -d -o root -g root -m 755 /srv/sftp "$CHROOT"
|
||||||
|
# (nicht anfassen, wenn schon eingehängt – sonst gehörte das Volume danach root)
|
||||||
|
mountpoint -q "$CHROOT/shared" || install -d -o root -g root -m 755 "$CHROOT/shared"
|
||||||
|
if ! grep -q " $CHROOT/shared " /etc/fstab; then
|
||||||
|
echo "$VOLUME $CHROOT/shared none bind 0 0" >>/etc/fstab
|
||||||
|
fi
|
||||||
|
mountpoint -q "$CHROOT/shared" || mount "$CHROOT/shared"
|
||||||
|
|
||||||
|
# Eingangsordner, in den die Container-Dateien schreibbar sind
|
||||||
|
install -d -o "$(stat -c %u "$VOLUME")" -g "$GID" -m 2775 "$VOLUME/youtube/upload"
|
||||||
|
|
||||||
|
# Schlüssel außerhalb des Chroot
|
||||||
|
install -d -o root -g root -m 755 /etc/ssh/authorized_keys
|
||||||
|
echo "$SCHLUESSEL" >"/etc/ssh/authorized_keys/$NUTZER"
|
||||||
|
chmod 644 "/etc/ssh/authorized_keys/$NUTZER"
|
||||||
|
|
||||||
|
cat >"/etc/ssh/sshd_config.d/sftp-$NUTZER.conf" <<EOF
|
||||||
|
# Reiner SFTP-Zugang zu /shared (eingerichtet mit claude-remote/sftp-upload.sh)
|
||||||
|
Match User $NUTZER
|
||||||
|
AuthorizedKeysFile /etc/ssh/authorized_keys/%u
|
||||||
|
AuthenticationMethods publickey
|
||||||
|
PasswordAuthentication no
|
||||||
|
ChrootDirectory $CHROOT
|
||||||
|
ForceCommand internal-sftp -u 0002 -d /shared/youtube/upload
|
||||||
|
AllowTcpForwarding no
|
||||||
|
AllowAgentForwarding no
|
||||||
|
X11Forwarding no
|
||||||
|
PermitTTY no
|
||||||
|
Match all
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Falls sshd nur bestimmte Nutzer zulässt, muss der neue Nutzer dazu
|
||||||
|
if sshd -T 2>/dev/null | grep -qi '^allowusers'; then
|
||||||
|
echo "Hinweis: In der sshd-Konfiguration steht AllowUsers. $NUTZER dort ergänzen, sonst wird der Zugang abgelehnt."
|
||||||
|
fi
|
||||||
|
|
||||||
|
sshd -t
|
||||||
|
systemctl reload ssh 2>/dev/null || systemctl reload sshd
|
||||||
|
echo "Fertig. Test: sftp $NUTZER@$(hostname -f) (Start im Ordner /shared/youtube/upload)"
|
||||||
Loading…
Reference in a new issue