SSHFS монтирует удалённый каталог по SSH как локальную папку через FUSE. Файловый менеджер, IDE и обычные cp/ls/nano работают с remote-файлами без отдельного SFTP-клиента и без постоянного scp туда-обратно. Канал – тот же SSH: ключи, порт, ProxyJump, всё знакомое.
Что это и когда уместно
SSHFS (SSH File System) – userspace-ФС на базе FUSE и SSH/SFTP. Удалённый путь появляется в дереве локальных mount-точек. Удобно для:
- правки конфигов и кода на сервере из локального редактора;
- быстрого просмотра логов и артефактов без копирования всего дерева;
- одноразовых задач, где полноценный rsync/NFS избыточен.
Это не замена NFS/CIFS для высоконагруженного shared storage и не лучший выбор для thrashing мелких файлов на высоком latency (node_modules, тяжёлая сборка). Для массового зеркалирования чаще берут rsync; для «жить на remote» – IDE remote / devcontainer. SSHFS – середина: прозрачный mount, пока сеть живая.
Установка
Ubuntu / Debian
sudo apt update sudo apt install sshfs
CentOS / RHEL / Fedora
# старые yum-системы sudo yum install sshfs # Fedora / современные RHEL-клоны sudo dnf install sshfs
Arch Linux
sudo pacman -S sshfs
macOS
Нужны FUSE for macOS (или аналог) и пакет sshfs. Через Homebrew:
brew install sshfs
На macOS путь отмонтирования и требования к FUSE-драйверу отличаются от Linux – смотрите актуальную инструкцию brew/cask для вашей версии ОС.
Подготовка и монтирование
Исходные данные (пример):
- хост:
example.com - пользователь:
username - remote path:
/var/www/html
Локальная точка монтирования:
mkdir -p ~/remote_html
Монтирование:
sshfs username@example.com:/var/www/html ~/remote_html
После успешного auth (пароль или ключ) содержимое /var/www/html видно в ~/remote_html. Проверка: ls ~/remote_html, mount | grep remote_html.
Работа с файлами
- Список:
ls ~/remote_html - Правка:
nano ~/remote_html/index.php - Копия на локальный диск:
cp ~/remote_html/style.css ~/projects/local_style.css
Права и владельцы на remote определяются SSH-пользователем и umask/опциями mount. Локальный chown часто «притворный» (FUSE mapping), не путайте с реальным владельцем на сервере.
Отмонтирование
Linux (fusermount):
fusermount -u ~/remote_html # или umount ~/remote_html
Если mount «залип» (сеть оборвалась, процесс держит cwd внутри):
fusermount -uz ~/remote_html # крайний случай sudo umount -l ~/remote_html
На macOS чаще umount / diskutil unmount.
Полезные опции
Нестандартный порт SSH:
sshfs -p 2222 username@example.com:/var/www/html ~/remote_html
Явный ключ:
sshfs -o IdentityFile=~/.ssh/id_rsa username@example.com:/var/www/html ~/remote_html
Частые -o:
reconnect– пытаться восстановить сессию после обрыва;ServerAliveInterval=15– keepalive, меньше «молчаливых» зависаний;compression=yes– иногда помогает на медленных линках и текстовых файлах;allow_other– доступ другим локальным пользователям (нужны настройки FUSE, осторожно с безопасностью);uid=/gid=– маппинг владельца на локальной стороне.
Полный список – man sshfs и репозиторий libfuse/sshfs.
Производительность и безопасность
- Latency сети = latency каждой мелкой операции (stat, open). IDE с агрессивным индексом по mount может тормозить.
- SSH multiplexing (
ControlMaster/ControlPathв~/.ssh/config) ускоряет повторные подключения и иногда сам mount. - Ключи:
chmod 600на private key, agent или аппаратный ключ, без ключей «для всех» в world-readable каталогах. - Не монтируйте production root «на всякий случай» с машины, где много GUI-софта: один ransomware/скрипт с доступом к home увидит и remote.
Краткий чеклист
- Пакет
sshfs+ рабочий SSH на хост mkdirлокальной точки →sshfs user@host:/path ~/mnt- Порт/ключ:
-p,-o IdentityFile=... - Сняли работу:
fusermount -u/umount - Для bulk-копий и бэкапов предпочтительнее rsync/scp, не thrashing через FUSE
SSHFS – простой способ «открыть сервер как папку», пока SSH уже есть и не нужен отдельный сетевой FS. Для повседневной правки конфигов и точечной работы с файлами его обычно достаточно; для CI, зеркал и высоконагруженного I/O выбирайте инструменты без FUSE-надбавки на каждую операцию.
