如何在配置文件中设置 sftp -s 子系统选项

如何在配置文件中设置 sftp -s 子系统选项

sftp 命令支持子系统选项 (-s),允许远程用户选择远程 sftp-server 可执行文件,并可选择在此过程中升级到 sudo;

sftp -s "/usr/bin/sudo /usr/libexec/openssh/sftp-server" xxx.yyy.zzz.aaa

此命令遵循 ~/.ssh/config 中的 ssh 客户端选项,允许透明地使用 pubkey 以及自定义端口和用户设置。

然而,subsystem似乎是 sftp 特定的,因此它没有在配置文件中设置,并且似乎必须将其设置为 sftp 的命令行选项。

然而,某些工具包装了 sftp 调用,因此无法设置子系统选项,因此无法进行用户访问。

通常是否有一些配置选项文件可以用来为 openssh sftp 设置此选项?

是否有一些配置文件可以影响 gnome nautilus 调用 sftp 进行文件管理器集成的方式?


更新可能的破解但有效的解决方案是......

因此,事实证明,sftp 没有明显的配置文件用于选项,因此我最终修改了一个通用包装脚本,通过将其放入我的路径中来显式为我选择的主机添加选项;

#!/bin/bash
#  Generic shell wrapper that performs an operation

OPERATION=/usr/bin/sftp
args=("$@")
#the final arg should contain a hostname of the form [user@]host[:path]
case "${args[@]: -1}" in
    myserver.com)
    exec $OPERATION -s "/usr/bin/sudo /usr/libexec/openssh/sftp-server" "$args"
    ;;
*)
   exec $OPERATION "$args" 
    ;;
esac

然而根据你的 sudoers 文件,通常运行 sudo 需要一个 tty,所以你必须将“-t”选项传递给 ssh,你猜怎么着? ssh_config 或 ~/.ssh/config 文件中记录的 ssh 客户端命令没有配置选项。哈哈。

所以我编写了另一个包装脚本来提供......

#!/bin/bash
#  Generic shell wrapper that performs an operation

OPERATION=/usr/bin/ssh
args=("$@")
#locating the hostname is not so simple with ssh
exec $OPERATION -tt "$args"

不过,我现在无法让 sftp 使用我的 ~/bin/ssh 包装文件,因为它似乎被硬编码到 sftp 中并由选项“-S”控制

答案1

根据ssh_config(5)man page,可以在sshd_config配置文件中配置路径:

 Subsystem
         Configures an external subsystem (e.g. file transfer daemon).
         Arguments should be a subsystem name and a command (with optional
         arguments) to execute upon subsystem request.

所以看起来你可以简单地做到这一点:

Subsystem sftp /usr/libexec/openssh/sftp-server -s "/usr/bin/sudo /usr/libexec/openssh/sftp-server"

这个配置显然是在服务器,不在客户端配置中。这是你要找的吗?缺点显然是每一个sftp 连接将尝试以 root 权限运行,因此这将破坏对文件的非 root 访问。

相关内容