web-dev-qa-db-ja.com

autofsを介してユーザーとしてsshfsを実行する

私の状況:

  • 私が管理していないLAN上にいくつかのサーバーがあります
  • sshfs、シェル、およびリモートX11アプリのSSHを使用してそれらにアクセスします
  • ControlMaster autoファイルに~/.ssh/configを設定したので、認証の遅延は発生しません
  • プライベートLANを使用しているか、VPNを使用しているため、圧縮と高速/低速暗号を使用しています
  • 可能な限り、(パスワードなしの)公開RSAキーをサーバーにエクスポートしました

autofsを使用して作業を楽にしましたが、autofsはすべてのマウントコマンドをrootとして実行したいと考えています。もちろん、 rootとして新しいRSAキーペアを生成し、それをエクスポートする 、および自分の~/.ssh/configオプションをスーパーユーザーの構成ファイルに複製することもできますが、2つのコピーを維持したくありませんこれらのうち、各ホストへのSSH接続を1つだけ開いておくという私の願望は解決されません。したがって、autofsを非特権ユーザーとしてsshfsを実行させたいのですが、ターミナルで手動で呼び出されたときと同じように。

autofsスクリプトを調べましたが、これらは私の問題の解決策ではないようです。助言がありますか?

5
billyjmc

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[*]}"
1
kreator

afuseホームページ (私の強調)から直接取得:

afuseは、Fuseを使用してユーザースペースに実装される自動マウントファイルシステムです。afuseは現在、自動マウンターで期待できる最も基本的な機能を実装しています。つまり、仮想ディレクトリのディレクトリを管理します。これらの仮想ディレクトリの1つがアクセスされ、まだ自動マウントされていない場合、afuseはファイルシステムをそのディレクトリにマウントしようとします。マウントが成功した場合、要求されたアクセスは通常どおり続行されます。それ以外の場合、エラーで失敗します。特定の使用シナリオについては、以下の例を参照してください。

従来のオートマウンターに対するafuseを使用する利点は、個々のユーザーがafuseを完全にユーザースペースで実行することです。したがって、呼び出し元のユーザー環境を利用できます。たとえば、パスワードなしのsshfsマウント用のssh-agentへのアクセスを許可したり、へのアクセスを許可したりできます。パスワードの要求など、マウントを完了するためのユーザー入力を取得するためのグラフィカル環境。

このオプションは、シューインのようです。

3
billyjmc

別の同様の質問 から大きく引き出して、解決策を見つけました。ただし、かなりの実験と調整が必要でした。この変更されたスクリプトは、/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
1
billyjmc

autosshfs は、あなたが求めているものに近づく可能性があります。これは、「ユーザーのSSH構成とキーを使用したユーザーごとのSSHFS自動マウント」です。

1
kynan