Tom*_*Tom 11 sftp sudo openssh sshfs
sftp 命令支持一个子系统选项 (-s),它允许远程用户选择远程 sftp-server 可执行文件,并在这个过程中可选地升级到 sudo;
sftp -s "/usr/bin/sudo /usr/libexec/openssh/sftp-server" xxx.yyy.zzz.aaa
Run Code Online (Sandbox Code Playgroud)
此命令遵循 ~/.ssh/config 中的 ssh 客户端选项,允许透明使用公钥和自定义端口和用户设置。
然而,它subsystem似乎是 sftp 特定的,因此它没有在配置文件中设置,它似乎必须设置为 sftp 的命令行选项。
然而,一些工具包装了 sftp 调用,因此无法设置子系统选项,因此卡住了用户访问。
是否有一些配置选项文件我可以用来为openssh sftp设置这个?
是否有一些配置文件会影响 gnome nautilus 调用 sftp 以进行文件管理器集成的方式?
更新可能的hacky-but-functioning解决方案是......
所以事实证明没有明显的配置文件 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
Run Code Online (Sandbox Code Playgroud)
然而,根据你的 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"
Run Code Online (Sandbox Code Playgroud)
虽然,我现在无法让 sftp 使用我的 ~/bin/ssh 包装文件,因为它似乎被硬编码到 sftp 中并由选项“-S”控制
根据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.
Run Code Online (Sandbox Code Playgroud)
所以看起来你可以简单地做到这一点:
Subsystem sftp /usr/libexec/openssh/sftp-server -s "/usr/bin/sudo /usr/libexec/openssh/sftp-server"
Run Code Online (Sandbox Code Playgroud)
这个配置显然是在服务器上进行的,而不是在客户端配置中。这是您要找的吗?显然,缺点是每个sftp 连接都会尝试以 root 权限运行,因此这会破坏对文件的非 root 访问。
| 归档时间: |
|
| 查看次数: |
7385 次 |
| 最近记录: |