Executando sshfs como usuário via autofs

4

Minha situação:

  • Existem vários servidores na minha LAN que eu não administro
  • eu os acessei usando o SSH para sshfs , shells e aplicativos X11 remotos
  • Eu defini ControlMaster auto no meu arquivo ~/.ssh/config para não ter atraso de autenticação
  • eu uso compactação e criptografia rápida / fraca, já que estou em uma LAN privada ou usando VPN
  • Sempre que possível, eu exportei minha chave RSA pública (sem senha) para os servidores

Eu comecei a usar autofs para facilitar minha vida, mas autofs quer executar todos os seus comandos de montagem como root. Eu posso, claro, gerar um novo par de chaves RSA como root e exportar , e também replicar meu próprio ~/.ssh/config opções para o arquivo de configuração do superusuário, mas eu prefiro não manter duas cópias dessas coisas, e isso não resolve o meu desejo de ter apenas uma conexão SSH aberta para cada host. Portanto, eu quero que o autofs execute sshfs como um usuário não privilegiado , assim como quando invocado manualmente no terminal.

Eu examinei os scripts autofs , mas eles não parecem ser uma solução para o meu problema. Alguma sugestão?

    
por billyjmc 17.04.2013 / 08:02

4 respostas

1

JFTR, modifiquei (e simplifiquei) ssh_user para que primeiro tente entrar em contato com o usuário 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[*]}"
    
por 25.07.2013 / 14:02
3

Extraído diretamente da página inicial do afuse (grifo meu):

afuse is an automounting file system implemented in user-space using FUSE. afuse currently implements the most basic functionality that can be expected by an automounter; that is it manages a directory of virtual directories. If one of these virtual directories is accessed and is not already automounted, afuse will attempt to mount a filesystem onto that directory. If the mount succeeds the requested access proceeds as normal, otherwise it will fail with an error. See the example below for a specific usage scenario.

The advantage of using afuse over traditional automounters is afuse runs entirely in user-space by individual users. Thus it can take advantage of the invoking users environment, for example allowing access to an ssh-agent for password-less sshfs mounts, or allowing access to a graphical environment to get user input to complete a mount such as asking for a password.

Esta opção parece ser um shoo-in.

    
por 29.04.2013 / 02:54
1

o autosshfs pode chegar perto do que você está procurando: é um "automount SSHFS por usuário usando a configuração SSH do usuário e as chaves ".

    
por 22.08.2013 / 01:27
0

Com base em outra pergunta semelhante , encontrei uma solução. Isso exigiu alguns experimentos sérios e ajustes, no entanto. Observe que esse script modificado agora é incompatível com a montagem de /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


Isso precisa ser executável, é claro: /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"


E, caso alguém se importe: ~/.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
    
por 17.04.2013 / 10:40