Запуск sshfs от имени пользователя через autofs

2721
billyjmc

Моя ситуация:

  • В моей локальной сети есть несколько серверов, которые я не администрирую
  • Я получаю к ним доступ через SSH для sshfs, оболочек и удаленных приложений X11
  • Я установил ControlMaster autoв своем ~/.ssh/configфайле, чтобы я не испытывал задержки аутентификации
  • Я использую сжатие и быстрые / слабые шифры, так как я либо в частной локальной сети, либо использую VPN
  • По возможности я экспортировал мой (без пароля) открытый ключ RSA на серверы.

Я начал использовать autofs, чтобы сделать мою жизнь проще, но autofs хочет запускать все свои команды монтирования как root. Конечно, я могу сгенерировать новую пару ключей RSA в качестве пользователя root и экспортировать ее, а также реплицировать свои собственные ~/.ssh/configпараметры в конфигурационный файл суперпользователя, но я бы предпочел не сохранять две копии этих вещей, и это не решает мое желание иметь только одно открытое соединение SSH с каждым хостом. Поэтому я хочу, чтобы autofs запускался sshfsот имени непривилегированного пользователя, точно так же, как при ручном вызове на терминале.

Я изучил скрипты autofs, но они не являются решением моей проблемы. Какие-либо предложения?

4

4 ответа на вопрос

3
billyjmc

Взято прямо с домашней страницы (выделено мной):

afuse - это файловая система с автоматическим монтированием, реализованная в пространстве пользователя с помощью FUSE. afuse в настоящее время реализует самые основные функциональные возможности, которые можно ожидать от автомонтера; то есть он управляет каталогом виртуальных каталогов. Если к одному из этих виртуальных каталогов обращаются, и он еще не подключен автоматически, afuse попытается смонтировать файловую систему в этот каталог. Если монтирование завершается успешно, запрошенный доступ продолжается как обычно, в противном случае произойдет сбой с ошибкой. Смотрите пример ниже для конкретного сценария использования.

Преимущество использования afuse по сравнению с традиционными автомонтировщиками заключается в том, что отдельные пользователи работают в бесконечном пространстве. Таким образом, он может воспользоваться преимуществами пользовательской среды вызова, например, предоставляя доступ к ssh-агенту для монтирования sshfs без пароля или предоставляя доступ к графической среде для получения пользовательского ввода для завершения монтирования, такого как запрос пароля.

Этот вариант выглядит как шо-ин.

1
kreator

JFTR, I've modified (and simplified) ssh_user so that it first tries to contact the user's ssh-agent:

#!/bin/bash # Open a ssh connection as a given user, thus using his/hers authentication # agent and/or config files. : $ : $ export SSH_AUTH_SOCK=$(find /tmp/ssh-* -type s -user $ -name agent* | tail -1) declare -a options=( $* ) # Remove unwanted options for (( i=0,fin=${#options[*]} ; i < fin ; i++ )) do case $ in (-a|-oClearAllForwardings=*) unset options[$i] ;; esac done exec /bin/su $ -c "$(which ssh) $ $" 
1
kynan

autosshfs might come close to what you're after: it is a "per user SSHFS automount using user’s SSH config and keys".

Мне это нравится. У меня проблема в том, что не все мои удаленные хосты позволяют мне использовать открытые / закрытые пары ключей для входа (да, это отстой и не имеет смысла). billyjmc 10 лет назад 0
0
billyjmc

Drawing heavily from another similar question, I've found a solution. It required some serious experimentation and tweaking, though. Note that this modified script is now incompatible with mounting from /etc/fstab.

/etc/auto.master

/- /etc/auto.sshfs uid=1000,gid=1000,--timeout=30,--ghost 


/etc/auto.sshfs

/local/mountpoint -fstype=fuse,rw,nodev,nonempty,noatime,allow_other,workaround=rename,ssh_command=/usr/local/sbin/ssh_user :sshfs\#remoteuser@server\:/remote/path 


This needs to be executable, of course: /usr/local/sbin/ssh_user

#!/bin/bash # declare arrays for ssh options declare -a ADD_OPTIONS declare -a CLEANED_SSH_OPTS # add options to be automatically added to the ssh command here. # example #ADD_OPTIONS=( '-C' ) # empty default ADD_OPTIONS=( ) # The following options to SSH cause it to open a connection and immediately # become a background task. This allow this script to open a local socket # for future invocations of ssh. (use "ControlMaster auto" in ~/.ssh/config) SOCKET_OPTIONS=( '-fN' ) for OPT in "$@"; do # Add list of values to be removed from sshfs ssh options. By default, sshfs # disables X11 forwarding. We're overriding that behavior. case $OPT in "-x") # this and these like this will be removed ;; "-a") ;; "-oClearAllForwardings=yes") ;; *) # These are ok.. add NUM=${#CLEANED_SSH_OPTS[@]} CLEANED_SSH_OPTS[$NUM]="$OPT" ;; esac done # For some reason, I needed to generate strings of the ssh command before # passing it on as an argument to the 'su' command. It simply would not # work otherwise. # Throwing the $SOCKET_OPTIONS in with the rest of the arguments is kind # of hackish, but it seems to handily override any other specified behavior. # Establishes an ssh socket if none exists... SSH_SOCKET_CMD="ssh $SOCKET_OPTIONS $ $" su localuser -c "$SSH_SOCKET_CMD" # ...and use that socket to mount the remote host SSH_SSHFS_CMD="ssh $ $" exec su localuser -c "$SSH_SSHFS_CMD" 


And, in case anyone cares: ~/.ssh/config

Host * ControlMaster auto ControlPath /tmp/%u@%l→%r@%h:%p ServerAliveInterval 10 Compression yes Host host1 host1.myschool.edu host2 host2.myschool.edu ForwardX11 yes Ciphers arcfour256,arcfour128,arcfour,blowfish-cbc Host host3 host3.myschool.edu ForwardX11 no Ciphers arcfour256,arcfour128,arcfour,blowfish-cbc 

Похожие вопросы