SFTP
Provided by: Hoody API (SSH Proxy)
- Built on SSH protocol (port 22)
- Same infrastructure as SSH access
- Same authentication (SSH keys)
- Privacy-preserving routing
- Universal SFTP client support
Access your container’s filesystem from your local machine. You mount the container’s storage on YOUR computer (client-initiated), giving you drag-and-drop file access while keeping full control—your machine connects to the container, not the other way around.
Why this is practical:
File Access:
Related Access:
TWO protocols for local mounting:
SFTP
Provided by: Hoody API (SSH Proxy)
WebDAV
Provided by: hoody-kit (hoody-files service)
Both protocols access the SAME container filesystem. SFTP via Hoody API, WebDAV via hoody-kit.
SFTP provided by Hoody API’s SSH Proxy—same infrastructure as SSH access.
Protocol: SFTP (SSH File Transfer Protocol)Host: ssh.{server-name}.containers.hoody.icuPort: 22Username: rootAuthentication: SSH public keyYou mount FROM your local machine TO the container - client-initiated connection for security and control.
Example: If your container is on server us-west-1, the SFTP host is:
ssh.us-west-1.containers.hoody.icuPrivacy benefit: Same endpoint for ALL containers on that server. SFTP routing happens by SSH public key during handshake—not visible in connection URL.
sftp://ssh.us-west-1.containers.hoody.icu~/.ssh/hoody-container-1Mounted at: /Volumes/ssh.us-west-1.containers.hoody.icu/
# Mount via sshfs (requires osxfuse/macFUSE)brew install macfusebrew install gromgit/fuse/sshfs-mac
# Create mount pointmkdir -p ~/Hoody/container-1
# Mount containersshfs root@ssh.us-west-1.containers.hoody.icu:/ \ ~/Hoody/container-1 \ -o IdentityFile=~/.ssh/hoody-container-1
# Access filesls ~/Hoody/container-1/hoody/storage
# Unmount when doneumount ~/Hoody/container-1Download: WinSCP
New Site:
ssh.us-west-1.containers.hoody.icu22rootAuthentication:
%USERPROFILE%\.ssh\hoody-container-1Login - Container filesystem appears in WinSCP’s file manager
Optional: Tools → Preferences → Integration → Explorer
Edit → Settings → Connection → SFTP
%USERPROFILE%\.ssh\hoody-container-1Site Manager → New Site:
ssh.us-west-1.containers.hoody.icu22rootConnect - Two-pane file manager shows local + remote
SFTP not natively supported. Use WinSCP or FileZilla.
Or map WebDAV drive instead (see WebDAV section below).
# Install sshfssudo apt-get install sshfs # Debian/Ubuntusudo dnf install sshfs # Fedorasudo pacman -S sshfs # Arch
# Create mount pointmkdir -p ~/hoody-containers/container-1
# Mount containersshfs root@ssh.us-west-1.containers.hoody.icu:/ \ ~/hoody-containers/container-1 \ -o IdentityFile=~/.ssh/hoody-container-1
# Access filesls ~/hoody-containers/container-1/hoody/storage
# Make persistent (add to /etc/fstab)echo "root@ssh.us-west-1.containers.hoody.icu:/ /home/user/hoody-containers/container-1 fuse.sshfs defaults,IdentityFile=/home/user/.ssh/hoody-container-1,allow_other 0 0" | sudo tee -a /etc/fstab
# Unmountfusermount -u ~/hoody-containers/container-1| Client | Platform | GUI | Features |
|---|---|---|---|
| FileZilla | Win/Mac/Linux | ✅ | Two-pane, queue, bookmarks, free |
| WinSCP | Windows | ✅ | Explorer integration, scripting, sync |
| Cyberduck | Mac/Windows | ✅ | Finder integration, cloud services |
| Transmit | Mac | ✅ | Beautiful UI, fast, paid |
| sshfs | Mac/Linux | ❌ | Command-line, native mounting |
| Mountain Duck | Mac/Windows | ❌ | Mount as drive letter, paid |
WebDAV provides HTTP-based filesystem access with native OS support.
# Get container details to build WebDAV URLhoody containers get $CONTAINER_ID
# The WebDAV URL follows this pattern:# https://{project}-{container}-files.{server}.containers.hoody.icu/const container = await client.api.containers.get(CONTAINER_ID);const { project_id, id, server } = container.data;
// Construct WebDAV URL from container detailsconst webdavUrl = `https://${project_id}-${id}-files.${server.name}.containers.hoody.icu/`;console.log(webdavUrl);// https://proj123-cont456-files.us-west-1.containers.hoody.icu/# Get container details to find server name and IDscurl "https://api.hoody.icu/api/v1/containers/$CONTAINER_ID" \ -H "Authorization: Bearer $TOKEN"
# Build WebDAV URL from response:# https://{project_id}-{container_id}-files.{server_name}.containers.hoody.icu/Connection Details:
URL: https://{project}-{container}-files.{server}.containers.hoody.icu/Authentication: Hoody Proxy PermissionsExample URL:
https://proj123-cont456-files.us-west-1.containers.hoody.icu/You mount FROM your client TO the container - you control the connection.
Finder → Go → Connect to Server (⌘K)
Server Address:
https://proj123-cont456-files.us-west-1.containers.hoody.icu/Click Connect
Authentication:
Container filesystem mounts as WebDAV drive
Mounted at: /Volumes/webdav/
Add to Login Items for auto-mount:
Right-click “This PC” → Map network drive
Drive letter: Choose (e.g., Z:)
Folder:
https://proj123-cont456-files.us-west-1.containers.hoody.icu/✅ Check: “Reconnect at sign-in” (for persistence)
✅ Check: “Connect using different credentials”
Credentials:
Click Finish - Drive appears in Explorer as Z:\
If “The network path was not found”:
Enable WebClient service:
# Run as Administratorsc config webclient start=autosc start webclientModify registry for HTTPS support:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\ParametersBasicAuthLevel = 2 (DWORD)Try mapping again
# Install davfs2sudo apt-get install davfs2 # Debian/Ubuntusudo dnf install davfs2 # Fedora
# Create mount pointsudo mkdir -p /mnt/hoody-container
# Add credentials to /etc/davfs2/secrets (if Proxy Permissions configured)echo "https://proj123-cont456-files.us-west-1.containers.hoody.icu/ USERNAME PASSWORD" | sudo tee -a /etc/davfs2/secrets# OR leave blank if no permissions configuredsudo chmod 600 /etc/davfs2/secrets
# Mountsudo mount -t davfs https://proj123-cont456-files.us-west-1.containers.hoody.icu/ /mnt/hoody-container
# Access filesls /mnt/hoody-container/hoody/storage
# Make persistent (add to /etc/fstab)echo "https://proj123-cont456-files.us-west-1.containers.hoody.icu/ /mnt/hoody-container davfs user,noauto 0 0" | sudo tee -a /etc/fstab
# Unmountsudo umount /mnt/hoody-containerRecommended WebDAV client for Android
Install WebDAV Navigator from Play Store
Add Connection:
https://proj123-cont456-files.us-west-1.containers.hoody.icu/Browse Files:
/hoody/storage, /home/user, etc. all accessibleFile Operations:
Popular file manager with WebDAV support
Install Solid Explorer
Add Storage:
proj123-cont456-files.us-west-1.containers.hoody.icu/Access:
Install FX File Explorer
Network → Add Network Location → WebDAV
https://proj123-cont456-files.us-west-1.containers.hoody.icu/Browse and manage files like local storage
iOS 13+ built-in WebDAV support
Open Files app
Tap ••• (More) → Connect to Server
Server:
https://proj123-cont456-files.us-west-1.containers.hoody.icu/Authentication:
Container mounts in sidebar under “Shared”
Access Files:
Feature-rich file manager with WebDAV
Install Documents
Services → + → WebDAV Server
https://proj123-cont456-files.us-west-1.containers.hoody.icu/Full file management:
Install FE File Explorer
Remote Storage → WebDAV
proj123-cont456-files.us-west-1.containers.hoody.icu/Two-pane file manager with thumbnails
Which protocol should you use?
| Feature | SFTP | WebDAV |
|---|---|---|
| Provided By | Hoody API (SSH Proxy) | hoody-kit (hoody-files) |
| Setup | Requires SSH key | Uses Proxy Permissions |
| Native Support | macOS/Linux (via sshfs) | macOS/Windows/iOS (built-in) |
| Mobile Support | Android/iOS SSH clients | Android/iOS native file managers |
| Security | SSH protocol (very secure) | HTTPS (secure) |
| Firewall | Port 22 (sometimes blocked) | Port 443 (rarely blocked) |
| Speed | Fast | Slightly slower (HTTP overhead) |
| Metadata | Full POSIX support | Limited metadata |
| Compatibility | All SFTP clients | All WebDAV clients |
Recommendation:
Mount container → Edit locally → Changes reflected immediately:
# Mount container filesystem# macOS:open sftp://ssh.us-west-1.containers.hoody.icu
# Edit files in your favorite local editorcode /Volumes/ssh.us-west-1.containers.hoody.icu/hoody/storage/myapp/
# Changes saved locally = changes in container instantlyPerfect for: Editing code, configs, logs without SSH terminal.
Drag & drop backup via file manager:
# Mount container# Copy /hoody/storage to local backupcp -r /Volumes/webdav/hoody/storage ~/Backups/container-backup-2025-11-10/
# Or use rsync for incremental backupsrsync -av /Volumes/webdav/hoody/storage/ ~/Backups/container-latest/Better than: Manual file downloads via HTTP API.
Upload hundreds of files efficiently:
# Mount container WebDAV# Drag entire project folder from local machine# to /Volumes/webdav/hoody/storage/projects/
# Or use command-linecp -r ~/Projects/website/* /Volumes/webdav/var/www/html/Faster than: Sequential HTTP uploads.
Tail logs in your favorite local text editor:
# Mount container# Open log file with live-updating editor (e.g., VS Code, Sublime Text)code /Volumes/webdav/hoody/storage/myapp/logs/app.log
# Log updates appear in real-time as container writesAlternative to: SSH + tail -f command.
SFTP’s public key routing means the connection URL doesn’t reveal which container you’re accessing:
# Same endpoint for all containersssh.us-west-1.containers.hoody.icu
# Routing happens by SSH key (invisible to network observers)WebDAV URLs contain project/container IDs (visible in URL).
SFTP: SSH keys already in ~/.ssh/ with permissions 600
WebDAV: Use credential managers:
chmod 600Never hard-code API tokens in scripts.
Leaving mounts active consumes resources:
# macOSumount /Volumes/webdav
# Linuxfusermount -u ~/hoody-containers/container-1
# Windowsnet use Z: /deleteOr use auto-unmount on logout/shutdown.
SFTP (Linux/macOS):
sshfs root@ssh.server.containers.hoody.icu:/ ~/container-1 \ -o ro,IdentityFile=~/.ssh/keyPrevents accidental deletions when just browsing/reading files.
Local mounting is for human interaction (file managers, editors).
For automation (scripts, CI/CD), use Hoody Files HTTP API:
# ✅ Automation: Direct HTTPcurl "https://...-files.../api/v1/files/data.json"
# ❌ Automation: Mounting unnecessarymount → access → unmount (slower, more complex)Yes. SFTP uses SSH authentication, so your container must have an ssh_public_key configured. See SSH Access.
WebDAV doesn’t require SSH—it uses Hoody Proxy Permissions (or no auth if permissions disabled).
Yes! Each container has unique SFTP/WebDAV endpoints. Mount as many as you need.
SFTP: Different SSH keys route to different containers (same hostname).
WebDAV: Different container URLs mount as different drives.
Minimal impact. File operations go through hoody-files service, which is optimized for this use case.
Heavy operations (copying GBs of data) will consume bandwidth and I/O, like any file transfer.
SFTP: Only if they have the container’s SSH private key.
WebDAV: Only if they pass Proxy Permissions (if configured). If permissions disabled, WebDAV is open access.
Security: Configure Proxy Permissions for WebDAV access control. SFTP is always key-protected.
Files are permanently deleted from container filesystem (same as SSH rm command).
Safety: Create snapshots before bulk deletions.
Yes! Mounting is INBOUND (to container) via Hoody Proxy. Network block mode only prevents OUTBOUND (from container).
Problem: “Connection refused” when mounting SFTP
Solutions:
Verify container is running:
curl "https://api.hoody.icu/api/v1/containers/{id}"# Check: "status": "running"Test SSH connectivity:
ssh -i ~/.ssh/hoody-container-1 root@ssh.server.containers.hoody.icu# Should connect to shellCheck SSH key is added to container:
# Verify via APIGET /api/v1/containers/{id}# Check: "ssh_public_key" field is setProblem: Windows can’t connect to WebDAV, authentication fails
Solutions:
Enable WebClient service:
sc config webclient start=autosc start webclientAllow Basic Auth over HTTPS:
Registry: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters
BasicAuthLevel = 2Check Proxy Permissions:
Problem: macOS blocks WebDAV connection due to SSL certificate
Solution: Hoody uses valid Let’s Encrypt certificates—this shouldn’t happen.
If it does:
Problem: Changes made in container don’t appear in mounted filesystem
Cause: File manager caching
Solutions:
Unmount and remount:
umount /Volumes/webdav# RemountRefresh view: F5 or ⌘R in file manager
Use Hoody Terminal to verify file contents:
cat /path/to/changed/fileProblem: File transfers via mounted filesystem are slow
Solutions:
Check network latency:
ping ssh.server.containers.hoody.icu# High latency = slow transfersUse local server: Create container on geographically close server
Compress before transfer:
# Instead of copying entire directorytar czf backup.tar.gz /source/dir# Copy single compressed file (faster)Consider direct HTTP upload for large files:
curl -X PUT "https://...-files.../api/v1/files/uploads/large-file.zip" \ --data-binary @large-file.zipOther storage capabilities:
/hoody/storage/hoody/databases/File access methods:
Understanding gained:
Your container’s filesystem, accessible from your local machine. SFTP via Hoody API. WebDAV via hoody-kit.
Client-initiated mounting. Your data, your control. Bridge cloud and local seamlessly.