In darkness
FreeBSD sshfs мой кривой перевод
читать дальше
Основные инструкции:
Несколько путей сделать смонтировать файловую систему:
1) % sshfs -o idmap=user [email protected]: /path/to/mount/point
или
2) % mount_fusefs auto /path/to/mount/point sshfs -o idmap=user \
[email protected]:
или
3) % env FUSE_DEV_NAME=/dev/fuse0 sshfs -o idmap=user \
[email protected]:
% mount_fusefs /dev/fuse0 /path/to/mount/point
Остальные опции смотреть ``sshfs -h''.
# sshfs -h
usage: sshfs [user@]host:[dir] mountpoint [options] # ну тут все понятно
general options: #тут тоже ничего особенного
-o opt,[opt...] mount options
-h --help print help
-V --version print version
SSHFS options:
-p PORT equivalent to '-o port=PORT' # порт соединения
-C equivalent to '-o compression=yes' # сжатие
-F ssh_configfile specifies alternative ssh configuration file # с альтернативной конфигураций
-1 equivalent to '-o ssh_protocol=1' # версия протокола (вообще-то уже сто лет как используется двойка)
-o reconnect reconnect to server # реконнект
-o sshfs_sync synchronous writes # синхронная запись
-o no_readahead synchronous reads (no speculative readahead)
-o sshfs_debug print some debugging information
-o cache=YESNO enable caching {yes,no} (default: yes)
-o cache_timeout=N sets timeout for caches in seconds (default: 20)
-o cache_X_timeout=N sets timeout for {stat,dir,link} cache
-o workaround=LIST colon separated list of workarounds
none no workarounds enabled
all all workarounds enabled
[no]rename fix renaming to existing file (default: off)
[no]nodelaysrv set nodelay tcp flag in sshd (default: off)
[no]truncate fix truncate for old servers (default: off)
[no]buflimit fix buffer fillup bug in server (default: on)
-o idmap=TYPE user/group ID mapping, possible types are:
none no translation of the ID space (default)
user only translate UID of connecting user
-o ssh_command=CMD execute CMD instead of 'ssh'
-o ssh_protocol=N ssh protocol to use (default: 2)
-o sftp_server=SERV path to sftp server or subsystem (default: sftp)
-o directport=PORT directly connect to PORT bypassing ssh
-o transform_symlinks transform absolute symlinks to relative
-o follow_symlinks follow symlinks on the server
-o no_check_root don't check for existence of 'dir' on server
-o password_stdin read password from stdin (only for pam_mount!)
-o SSHOPT=VAL ssh options (see man ssh_config)
FUSE options:
-d -o debug enable debug output (implies -f)
-f foreground operation
-s disable multi-threaded operation
-o allow_root allow access to root
-o allow_other allow access to other users
-o default_permissions enable permission checking by kernel
-o subtype=NAME set filesystem type
-o max_read=N set maximum size of read requests
-o noprivate allow secondary mounting of the filesystem
-o neglect_shares don't report EBUSY when unmount attempted
in presence of secondary mounts
-o push_symlinks_in prefix absolute symlinks with mountpoint
-o sync_unmount do unmount synchronously
-o hard_remove immediate removal (don't hide files)
-o use_ino let filesystem set inode numbers
-o readdir_ino try to fill in d_ino in readdir
-o direct_io use direct I/O
-o kernel_cache cache files in kernel
-o [no]auto_cache enable caching based on modification times (off)
-o umask=M set file permissions (octal)
-o uid=N set file owner
-o gid=N set file group
-o entry_timeout=T cache timeout for names (1.0s)
-o negative_timeout=T cache timeout for deleted names (0.0s)
-o attr_timeout=T cache timeout for attributes (1.0s)
-o ac_attr_timeout=T auto cache timeout for attributes (attr_timeout)
-o intr allow requests to be interrupted
-o intr_signal=NUM signal to send on interrupt (30)
-o modules=M1[:M2...] names of modules to push onto filesystem stack
-o max_write=N set maximum size of write requests
-o max_readahead=N set maximum readahead
-o async_read perform reads asynchronously (default)
-o sync_read perform reads synchronously
-o atomic_o_trunc enable atomic open+truncate support
Module options:
[subdir]
-o subdir=DIR prepend this directory to all paths (mandatory)
-o [no]rellinks transform absolute symlinks to relative
[iconv]
-o from_code=CHARSET original encoding of file names (default: UTF-8)
-o to_code=CHARSET new encoding of the file names (default: US-ASCII)
Появилась у меня необходимость обрабатывать логи lighttpd по по ряду причин делать это прямо на веб сервере я как говорится "имею возможность, но не имею желания". Поэтому первой задачей встало переправить этот лог, да так чтобы он случайно не оказался в чьих-то руках. Я выбрал для решения этой задачи sshfs. Собственно говоря о настройке ее и пойдет речь. Ставлю речь идет о настройке на FreeBSD 7.1.
После чтения википедии сложилось обманчивое впечатление что все просто и делается 1 командой:
Однако как оказалось это не правда.
1) Ставим
не встает. Ей нужно что-то из sources. Разумеется я их не поставил когда ставил базовую систему. Поскольку сервер на другом конце города и всунуть диск не кому ставим сырцы через sysinstall, где указываем что лить по ftp. Пробуем снова. Пошла установка, придется правда еще несколько пакетов поставить, но там ничего особенно сложного нет.
2) Делаем пользователей. Умные люди в интернетах пишут что для таких целей лучше всего подойдет аутентификация по ключу (хотя можно и host-based сделать в моем случае). Делаем следующее:
- создаем пользователей myuser на обоих серверах (зачем? так проще и прасивее) пароли не играют никакой роли, поэтому совпадают они или нет (привет самбоползователи
) не играет никакой роли.
- далее определимся в терминах: сервер1 - куда подключаемся сервер2 - тот который будет подключатся. На сервере 2 делаем
должны появится 2 файла: id_rsa и id_rsa.pub
отправляем публичный ключ на сервер1
затем идем на сервер1
в /home/myuser/ ищем файл myuser.id_rsa.pub Если не находим - find / | grep myuser.id_rsa.pub если опять его нигде нет дальше можно не читать.
Проверяем. Если все создалось как положено идем обратно на сервер2.
Теперь, мы по прежнему находимся под myuser, проверяем
Если этот пункт проделан правильно нас должно пустить без пароля. (если конечно вы не задали парольную фразу для пущей безопасности
)
3) собственно теперь у нас должно все заработать командой
Не работает!
Открываем /usr/local/etc/rc.d/fusefs и смотрим что никакой уличной магии там нет, сей скрипт подгружает модуль /usr/local/modules/fuse.ko в ядро. То же самое мы можем сделать руками
Проверяем с помощью kldstat. И не забываем добавить fusefs_enable="YES" в /etc/rc.conf
Далее разрешим не только руту монтировать файловые системы
И снова не забываем добавить в /etc/sysctl строчку "vfs.usermount=1"
И последний штрих:
И еще раз не забываем добавить в /etc/devfs.conf
perm /dev/fuse0 0666
Выполняем команду по образу подобию той, что в википедии и получаемPROFIT смонтированую файловую систему с удаленного сервера =)
К sshfs есть целая куча дополнительных параметров о чем man сухо упоминает. Например -o reconnect я честно говоря на понял как работает. Пока не понял. Но это хорошая тема для следующих топиков.
читать дальше
Основные инструкции:
Несколько путей сделать смонтировать файловую систему:
1) % sshfs -o idmap=user [email protected]: /path/to/mount/point
или
2) % mount_fusefs auto /path/to/mount/point sshfs -o idmap=user \
[email protected]:
или
3) % env FUSE_DEV_NAME=/dev/fuse0 sshfs -o idmap=user \
[email protected]:
% mount_fusefs /dev/fuse0 /path/to/mount/point
Остальные опции смотреть ``sshfs -h''.
# sshfs -h
usage: sshfs [user@]host:[dir] mountpoint [options] # ну тут все понятно
general options: #тут тоже ничего особенного
-o opt,[opt...] mount options
-h --help print help
-V --version print version
SSHFS options:
-p PORT equivalent to '-o port=PORT' # порт соединения
-C equivalent to '-o compression=yes' # сжатие
-F ssh_configfile specifies alternative ssh configuration file # с альтернативной конфигураций
-1 equivalent to '-o ssh_protocol=1' # версия протокола (вообще-то уже сто лет как используется двойка)
-o reconnect reconnect to server # реконнект
-o sshfs_sync synchronous writes # синхронная запись
-o no_readahead synchronous reads (no speculative readahead)
-o sshfs_debug print some debugging information
-o cache=YESNO enable caching {yes,no} (default: yes)
-o cache_timeout=N sets timeout for caches in seconds (default: 20)
-o cache_X_timeout=N sets timeout for {stat,dir,link} cache
-o workaround=LIST colon separated list of workarounds
none no workarounds enabled
all all workarounds enabled
[no]rename fix renaming to existing file (default: off)
[no]nodelaysrv set nodelay tcp flag in sshd (default: off)
[no]truncate fix truncate for old servers (default: off)
[no]buflimit fix buffer fillup bug in server (default: on)
-o idmap=TYPE user/group ID mapping, possible types are:
none no translation of the ID space (default)
user only translate UID of connecting user
-o ssh_command=CMD execute CMD instead of 'ssh'
-o ssh_protocol=N ssh protocol to use (default: 2)
-o sftp_server=SERV path to sftp server or subsystem (default: sftp)
-o directport=PORT directly connect to PORT bypassing ssh
-o transform_symlinks transform absolute symlinks to relative
-o follow_symlinks follow symlinks on the server
-o no_check_root don't check for existence of 'dir' on server
-o password_stdin read password from stdin (only for pam_mount!)
-o SSHOPT=VAL ssh options (see man ssh_config)
FUSE options:
-d -o debug enable debug output (implies -f)
-f foreground operation
-s disable multi-threaded operation
-o allow_root allow access to root
-o allow_other allow access to other users
-o default_permissions enable permission checking by kernel
-o subtype=NAME set filesystem type
-o max_read=N set maximum size of read requests
-o noprivate allow secondary mounting of the filesystem
-o neglect_shares don't report EBUSY when unmount attempted
in presence of secondary mounts
-o push_symlinks_in prefix absolute symlinks with mountpoint
-o sync_unmount do unmount synchronously
-o hard_remove immediate removal (don't hide files)
-o use_ino let filesystem set inode numbers
-o readdir_ino try to fill in d_ino in readdir
-o direct_io use direct I/O
-o kernel_cache cache files in kernel
-o [no]auto_cache enable caching based on modification times (off)
-o umask=M set file permissions (octal)
-o uid=N set file owner
-o gid=N set file group
-o entry_timeout=T cache timeout for names (1.0s)
-o negative_timeout=T cache timeout for deleted names (0.0s)
-o attr_timeout=T cache timeout for attributes (1.0s)
-o ac_attr_timeout=T auto cache timeout for attributes (attr_timeout)
-o intr allow requests to be interrupted
-o intr_signal=NUM signal to send on interrupt (30)
-o modules=M1[:M2...] names of modules to push onto filesystem stack
-o max_write=N set maximum size of write requests
-o max_readahead=N set maximum readahead
-o async_read perform reads asynchronously (default)
-o sync_read perform reads synchronously
-o atomic_o_trunc enable atomic open+truncate support
Module options:
[subdir]
-o subdir=DIR prepend this directory to all paths (mandatory)
-o [no]rellinks transform absolute symlinks to relative
[iconv]
-o from_code=CHARSET original encoding of file names (default: UTF-8)
-o to_code=CHARSET new encoding of the file names (default: US-ASCII)
Появилась у меня необходимость обрабатывать логи lighttpd по по ряду причин делать это прямо на веб сервере я как говорится "имею возможность, но не имею желания". Поэтому первой задачей встало переправить этот лог, да так чтобы он случайно не оказался в чьих-то руках. Я выбрал для решения этой задачи sshfs. Собственно говоря о настройке ее и пойдет речь. Ставлю речь идет о настройке на FreeBSD 7.1.
После чтения википедии сложилось обманчивое впечатление что все просто и делается 1 командой:
sshfs remoteuser@remotehost:/путь/к/удаленной_директории локальная_директория
Однако как оказалось это не правда.
1) Ставим
cd /usr/ports/sysutils/fusefs-sshfs
make install clean
не встает. Ей нужно что-то из sources. Разумеется я их не поставил когда ставил базовую систему. Поскольку сервер на другом конце города и всунуть диск не кому ставим сырцы через sysinstall, где указываем что лить по ftp. Пробуем снова. Пошла установка, придется правда еще несколько пакетов поставить, но там ничего особенно сложного нет.
2) Делаем пользователей. Умные люди в интернетах пишут что для таких целей лучше всего подойдет аутентификация по ключу (хотя можно и host-based сделать в моем случае). Делаем следующее:
- создаем пользователей myuser на обоих серверах (зачем? так проще и прасивее) пароли не играют никакой роли, поэтому совпадают они или нет (привет самбоползователи

- далее определимся в терминах: сервер1 - куда подключаемся сервер2 - тот который будет подключатся. На сервере 2 делаем
su myuser
ssh-keygen -t rsa
ls -la /home/myuser/.ssh/
должны появится 2 файла: id_rsa и id_rsa.pub
отправляем публичный ключ на сервер1
scp /home/myuser/.ssh/id_rsa.pub сервер1:myuser.id_rsa.pub
затем идем на сервер1
в /home/myuser/ ищем файл myuser.id_rsa.pub Если не находим - find / | grep myuser.id_rsa.pub если опять его нигде нет дальше можно не читать.
cd / home/myuser/
mkdir .ssh
cat /home/myuser/myuser.id_rsa.pub >> /home/myuser/.ssh/authorized_keys
Проверяем. Если все создалось как положено идем обратно на сервер2.
Теперь, мы по прежнему находимся под myuser, проверяем
ssh сервер1
Если этот пункт проделан правильно нас должно пустить без пароля. (если конечно вы не задали парольную фразу для пущей безопасности

3) собственно теперь у нас должно все заработать командой
sshfs myuser@сервер1:/удаленный_каталог /локальная_точка_монтирования
Не работает!
Открываем /usr/local/etc/rc.d/fusefs и смотрим что никакой уличной магии там нет, сей скрипт подгружает модуль /usr/local/modules/fuse.ko в ядро. То же самое мы можем сделать руками
kldload /usr/local/modules/fuse.ko
Проверяем с помощью kldstat. И не забываем добавить fusefs_enable="YES" в /etc/rc.conf
Далее разрешим не только руту монтировать файловые системы
sysctl vfs.usermount=1
И снова не забываем добавить в /etc/sysctl строчку "vfs.usermount=1"
И последний штрих:
ls /dev | grep fuse
chmod 0666 /dev/fuse0
И еще раз не забываем добавить в /etc/devfs.conf
perm /dev/fuse0 0666
Выполняем команду по образу подобию той, что в википедии и получаем
К sshfs есть целая куча дополнительных параметров о чем man сухо упоминает. Например -o reconnect я честно говоря на понял как работает. Пока не понял. Но это хорошая тема для следующих топиков.