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)
然而, …
我注意到,在 Raspbian 中,如果我在不使用 shell 的情况下通过 ssh 运行命令,我会得到以下信息$PATH
;
$ ssh pi@raspberrypi env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games
Run Code Online (Sandbox Code Playgroud)
我找不到这条路径的实际设置位置。
我假设 或/etc/profile
都/etc/bashrc
没有来源,因为它不是登录,也不是交互式 shell。看起来它可能会访问bashrc
,但不会走得太远;
# cat /etc/bash.bashrc
# System-wide .bashrc file for interactive bash(1) shells.
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
Run Code Online (Sandbox Code Playgroud)
pam
但是看起来会话将通过 pam 进行处理,并且表明/etc/pam.d/sshd
、/etc/environment
和/etc/security/pam_env.conf
用于/etc/default/locale
设置环境变量;
# Read environment variables from /etc/environment and
# /etc/security/pam_env.conf.
session required pam_env.so # [1]
# In …
Run Code Online (Sandbox Code Playgroud)