4

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

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

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

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

4 ответа4

3

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

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

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

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

1

autosshfs может приблизиться к тому, что вам нужно: это «автоматическое монтирование SSHFS для каждого пользователя с использованием конфигурации и ключей SSH пользователя».

1

JFTR, я изменил (и упростил) ssh_user чтобы он сначала пытался связаться с ssh-agent:

#!/bin/bash
# Open a ssh connection as a given user, thus using his/hers authentication
# agent and/or config files.
: ${ADDOPTS:="-2Ax"}
: ${LOCAL:="kreator"}
export SSH_AUTH_SOCK=$(find /tmp/ssh-* -type s -user ${LOCAL} -name agent* | tail -1)
declare -a options=( $* )

# Remove unwanted options
for (( i=0,fin=${#options[*]} ; i < fin ; i++ ))
do
    case ${options[$i]} in
            (-a|-oClearAllForwardings=*)    unset options[$i]
                                            ;;
    esac
done

exec /bin/su ${LOCAL} -c "$(which ssh) ${ADDOPTS} ${options[*]}"
0

Основываясь на другом подобном вопросе, я нашел решение. Это потребовало серьезных экспериментов и настройки. Обратите внимание, что этот измененный скрипт теперь несовместим с монтированием из /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


Конечно, это должен быть исполняемый файл: /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 ${ADD_OPTIONS[@]} ${CLEANED_SSH_OPTS[@]}"
su localuser -c "$SSH_SOCKET_CMD"

# ...and use that socket to mount the remote host
SSH_SSHFS_CMD="ssh ${ADD_OPTIONS[@]} ${CLEANED_SSH_OPTS[@]}"
exec su localuser -c "$SSH_SSHFS_CMD"


И, в случае, если кому-то все равно: ~/.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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .