Автомаунт флэшки во FreeBSD и авторизация по ключам для SSH

1. Автомаунт флэшки.

Флэшку с ключом будем монтировать в директорию внутри хоумдира юзера.

> mkdir -p /home/someuser/usb-key/SERVKEYS
> chmod 700 /home/someuser/usb-key/SERVKEYS

почему 700? да потому, что иначе ключ, лежащий в этой директории, не будет достаточно защищён, и ssh не даст вам с ним авторизоваться.

> sudo echo 'vfs.usermount=1' >> /etc/sysctl.conf
> sudo sysctl vfs.usermount=1

> sudo ee /etc/devfs.conf

own da0* someuser:someuser
perm da0* 0600

(либо, как у меня сделано на другой машине)
own da1* someuser:wheel
perm da1* 0640

>sudo ee /etc/devd.conf

attach 20 {
     device-name "umass0";
#если нужен автомаунт только конкретной флэшки, то прописываем
#соответствие vendor и/или product
     match "vendor" "0x1005";
     match "product" "0xb113";
     action "sleep 2 ; \
     sh /etc/rc.d/devfs restart ; \
     su - someuser -c '/sbin/mount -t msdosfs -o longnames /dev/da0s1 /home/someuser/usb-key'";
};
detach 20 {
     device-name "umass0";
     action "/sbin/umount /home/someuser/usb-key";
};

Примечание номер раз:
Не всегда автомаунт заводится сразу и без проблем. Например, на машинке, где da0 - это внешний винчестер, запись для которого есть в fstab, но автоматом он при старте не маунтится, - пока da0s1a не будет смонтирован, то даже при наличии девайса da0 моя флэшка (da1) автоматом маунтиться не хотела. Также для нужного нам девайса запись в fstab лучше закомментировать.

Примечание номер два:
Размонтирование флешки - обязательно вручную перед её извлечением! Иначе - паник гарантирован.

Примечание номер три:
Автомонтирование флэшки с указанием опций перекодировки (su - someuser -c '/sbin/mount_msdosfs -o longnames -L uk_UA.KOI8-U -D CP1251 /dev/da0s1 /home/someuser/usb-key') не сработает: зловредный модуль ядра msdosfs_iconv.ko, если он не был вкомпилен в ядро или подгружен перед загрузкой ядра согласно записи в /boot/loader.conf, автоматически подгрузится только при условии монтирования из-под root-а; если же модуль был вкомпилен\подгружен ранее, всё равно автомаунт с указанием кодировок от имени юзера не работает. К сожалению.

2. SSH и ключи.

Генерируем пару ключей (http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/openssh.html):

> ssh-keygen -t rsa
> mv ~/.ssh/id_rsa /home/someuser/usb-key/SERVKEYS/ID_RSA
> chmod 500 /home/someuser/usb-key/SERVKEYS/ID_RSA
> scp -P 2222 ~/.ssh/id_rsa.pub nat.somedomain.ua:/home/someuser/.ssh/authorized_keys

(если файл authorized_keys уже существует, добавляем содержимое id_rsa.pub в конец этого файла)

> cp /etc/ssh/ssh_config ~/.ssh/config
> ee ~/.ssh/config

IdentityFile /home/someuser/usb-key/SERVKEYS/ID_RSA

P.S.

Авторизация в sshd по ключам онли:
nat.somedomain.ua> sudo ee /etc/ssh/sshd_config
[...skipped...]
ChallengeResponseAuthentication no
[...skipped...]

P.P.S. Спасибо Сергею Можайскому за помощь и разъяснения.