在我的本地主机上,alpha我有一个foo通过 sshfs 映射到主机的目录,bravo如下所示:
$ sshfs charlie@bravo:/home/charlie ~/foo
Run Code Online (Sandbox Code Playgroud)
但是,在主机上bravo还有另一个用户 delta,我想sudo /bin/su成为它,以便我可以在bravo:/home/delta. delta可能无法通过 ssh 登录;由于我无法改变的原因,一旦你在机器上,你只能 sudo 到 delta。
通常我会 ssh 进入bravo,然后 sudo 到 delta,但我想知道当我通过 ssh 安装了查理的主目录时,是否有任何方法可以做到这一点。
小智 43
这将根据您连接到的服务器的操作系统而有所不同。对于 centOS 5,您将添加到 sshfs 挂载选项:
-o sftp_server="/usr/bin/sudo /usr/libexec/openssh/sftp-server"
对于 Ubuntu 9.10(我认为,可能是 9.04,但两者可能相同)或 Debian,您将添加:
-o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server".
要为运行 openSSH 的其他系统找到正确的路径,请运行
sudo grep Subsystem /etc/ssh/sshd_config
并查找 sftp-server 二进制文件的位置。
您可能需要使用 NOPASS:{path to sftp-server} 设置 sudo 或预先验证,ssh user@host sudo -v以便sudo更新notty. 就我而言,我的两个命令是:
ssh login_user@host sudo -v
sshfs login_user@host:remote_path local_path -o sftp_server="/usr/bin/sudo -u as_user /usr/lib/ssh/sftp-server"
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以使用bindfs + sshfs来访问其他用户文件(甚至是root)。
首先,使用重新映射的 uid 挂载“root”或用户下的任何其他目录。
ssh -t USER@SERVER "mkdir ~/tmproot; sudo bindfs --map=root/USER / ~/tmproot"
然后只需 sshfs 进入目录即可。
sshfs USER@SERVER:tmproot TARGET
但为了安全起见,最好不要映射整个根/,而只映射您需要的部分。例如:您可以使用此方法将任何其他用户目录挂载到您的目录,例如将文件从 /var/www 挂载到 ~/www 并将 root 重新映射到您的用户,以便您可以完全访问它。
如果您需要访问权限来保留 uid 或有权访问多个用户,那么我将创建一个新用户,例如 uid=0 和 /bin/false 的“rootfs”,并执行正常的 sshfs。
你可以尝试(但我认为它不会起作用):
sshfs -o ssh_command='ssh sudo /bin/su bravo' charlie@bravo:/home/charlie ~/foo
Run Code Online (Sandbox Code Playgroud)
我不太了解 sshfs,所以你也许可以让类似的东西工作,但我不能说如何,我会有点惊讶。
另一种可能性是将命令“sudo /bin/su bravo”放入 ~/.ssh/rc 中,但这会影响您所有的 fs 安装(假设它有效,我也对此表示怀疑)以及您对 ssh 的正常使用。
抱歉,黛比心情不好。