sshfs 带有 x 转发吗?

sshfs 带有 x 转发吗?

我一直在使用 sshfs 在我的笔记本电脑上挂载来自服务器的目录。

我的 ~/.ssh/config 中还有以下内容:ControlMaster auto

我设置这个是因为每当我 ssh 进入服务器时,它都会保持一个 ssh 连接处于活动状态。我这样做特别是为了使用 tramp 在 emacs 中快速浏览。

由于我的 /etc/fstab 中有 sshfs,因此来自 sshfs 的 ssh 连接是保持活动的。很多时候我还需要 X11 转发 (ssh -X -Y -C),而且由于我总是使用来自 sshfs 的原始连接,因此 X11 不会被转发。

当我从 fstab 中删除 sshfs 挂载并使用 -X -Y -C 选项手动 ssh 进入我的服务器时,X11 可以工作。

有没有办法为 sshfs 打开 -X -Y -C (或类似的)?我尝试添加 ForwardX11 yes ForwardX11Trusted yes

在 ~/.ssh/config 和 /etc/ssh/ssh_config 中强制始终启用该选项(可能有安全问题)。但是,/etc/fstab 中的 sshfs 不会选择此选项。

你有什么建议吗?谢谢!

答案1

解决这个问题的方法是使用脚本代替 ssh 命令。

sshfs 的手册页(至少自 2008 年 4 月 2.0 版起)

-o ssh_command=CMD
  execute CMD instead of 'ssh'

像这样:

sshfs user@remote: mountpoint -o ssh_command='/path/to/sshcmd -Y -X -C '

这是 sshcmd

#!/bin/bash

# declare array for ssh options
declare -a CLEANED_SSH_OPTS
declare -a ADD_OPTIONS

# add options to be automatically added to the ssh command here.
# example
#ADD_OPTIONS=( '-C' )
# empty default
ADD_OPTIONS=(  )

for OPT in "$@"; do 
  # add list of values to be removed
  # from sshfs ssh options
  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

# Start ssh with CLEANED options
exec ssh ${ADD_OPTIONS[@]} ${CLEANED_SSH_OPTS[@]}
# replace above exec with the next one if you ssh tunneling to run as your 
# local user. Like when using automatic mounts from fstab.
# Please note that this has some extra security issues.
#exec su YourUserName -c "ssh ${ADD_OPTIONS[@]} ${CLEANED_SSH_OPTS[@]}"

在 fstab 中添加类似这样的内容应该可以自动挂载 sshfs 并启用转发。请注意,挂载时通常是 root 用户,因此您可能需要对 sshcmd 进行适当的更改(参见 sshcmd 的最后一行)。

sshfs#USERID@HOST:/TARGETPATH /MOUNT_POINT fuse _netdev,user,ssh_command=/path/to/sshcmd\040-Y\040-X 0 0

答案2

尝试这个:

sshfs -ossh_command="ssh -A me@host1_wan_ip ssh $@" me@host2_lan_ip:/ /media/me/mount1

答案3

昨天我遇到了完全相同的问题。我已修改,sshcmd现在它还会尝试联系用户的ssh-agent。谢谢 Manwë!

#!/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[*]}"

相关内容