私の状況:
ControlMaster auto
ファイルに~/.ssh/config
を設定したので、認証の遅延は発生しませんautofsを使用して作業を楽にしましたが、autofsはすべてのマウントコマンドをrootとして実行したいと考えています。もちろん、 rootとして新しいRSAキーペアを生成し、それをエクスポートする 、および自分の~/.ssh/config
オプションをスーパーユーザーの構成ファイルに複製することもできますが、2つのコピーを維持したくありませんこれらのうち、各ホストへのSSH接続を1つだけ開いておくという私の願望は解決されません。したがって、autofsを非特権ユーザーとしてsshfs
を実行させたいのですが、ターミナルで手動で呼び出されたときと同じように。
autofsスクリプトを調べましたが、これらは私の問題の解決策ではないようです。助言がありますか?
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[*]}"
afuseホームページ (私の強調)から直接取得:
afuseは、Fuseを使用してユーザースペースに実装される自動マウントファイルシステムです。afuseは現在、自動マウンターで期待できる最も基本的な機能を実装しています。つまり、仮想ディレクトリのディレクトリを管理します。これらの仮想ディレクトリの1つがアクセスされ、まだ自動マウントされていない場合、afuseはファイルシステムをそのディレクトリにマウントしようとします。マウントが成功した場合、要求されたアクセスは通常どおり続行されます。それ以外の場合、エラーで失敗します。特定の使用シナリオについては、以下の例を参照してください。
従来のオートマウンターに対するafuseを使用する利点は、個々のユーザーがafuseを完全にユーザースペースで実行することです。したがって、呼び出し元のユーザー環境を利用できます。たとえば、パスワードなしのsshfsマウント用のssh-agentへのアクセスを許可したり、へのアクセスを許可したりできます。パスワードの要求など、マウントを完了するためのユーザー入力を取得するためのグラフィカル環境。
このオプションは、シューインのようです。
別の同様の質問 から大きく引き出して、解決策を見つけました。ただし、かなりの実験と調整が必要でした。この変更されたスクリプトは、/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
autosshfs は、あなたが求めているものに近づく可能性があります。これは、「ユーザーのSSH構成とキーを使用したユーザーごとのSSHFS自動マウント」です。