Думаю, ЛОР-овцам будет полезно.
Итак, все знают, что можно с помощью sshfs примонтировать удалённую директорию:
sshfs user@server:/remote/path /local/path
Однако, возникла обратная задача: примонтировать локальную директорию на сервере, инициировав подключение и командуя с локальной машины. При этом не подымая ssh-сервера на клиенте. Да вообще не делая ничего, что может потребовать root-прав, вроде поднятия интырпрайз-ready NFS-сервера.
Пользуясь прямой видимостью клиента с сервера (если бы её не было, можно бы было организовать reverse-туннель), пробовал поднять всякие колченогие недосервера, вроде davserver
для WebDAV или python -m pyftpdlib
для FTP и монтировать их на сервере с использованием wdfs или curlftpfs. На чтение работало (медленно), при попытке записи на WebDAV процесс на сервере намертво зависал (кажется, виноват wdfs, но я особо не разбирался), а curlftpfs не поддерживает seek.
Немного погуглив, наткнулся на это https://blog.dhampir.no/content/reverse-sshfs-mounts-fs-push и понял: это ОНО! Правда, там то, что мне нужно, описано другими словами: сервер иницирует подключение к клиенту и монтирует ему путь, который считает нужным. Но тут вопрос в том, что назвать сервером. Я называю ту машину, где работает sshd.
Итого, команда выглядит так:
dpipe /usr/lib/openssh/sftp-server = ssh user@server sshfs :/local/path /remote/path -o slave