在我的本地主机alpha我有一个目录通过sshfs映射到主机bravo ,如下所示:
$ sshfs charlie@bravo:/home/charlie ~/foo
然而,在主机bravo有另一个用户,三angular洲,我想要sudo /bin/su ,所以我可以在bravo:/home/delta工作bravo:/home/delta 。 delta可能不会通过sshlogin; 由于我无法改变的原因,只有当你在机器上时,你才可以追溯到三angular洲。
通常情况下,我会成为bravo ,然后sudo三angular洲,但我想知道是否有什么办法可以做到这一点,当我通过SSH安装查理的家庭目录。
这将取决于您连接到的服务器的操作系统。 对于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运行的其他系统find正确的path
sudo grep Subsystem /etc/ssh/sshd_config
并查找sftp-server二进制文件的位置。
您可能需要使用NOPASS设置sudo:{sftp-server}path或使用ssh user@host sudo -v进行notty以便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"
你可以尝试(但我不认为它会奏效):
sshfs -o ssh_command='ssh sudo /bin/su bravo' charlie@bravo:/home/charlie ~/foo
我不太了解sshfs,所以你可能会得到类似的工作,但我不能说如何,我会有点惊讶。
另一种可能是将命令“sudo / bin / su bravo”放在〜/ .ssh / rc中,但是这会影响你所有的fs安装(假设它工作,我也怀疑)以及你正常使用的ssh 。
对不起,作为一个debbie downer。
通过推论,我认为这是不可能通过一个简单的命令来实现的。
这是因为sshfs在不传递任何命令的情况下调用ssh,而是使用作为SSH子系统的SFTP。
从sshfs手册页:
在远程计算机上使用SSH的SFTP子系统。
此外 ,更改当前用户(或'su'或'sudo')不是SFTP协议的一部分,虽然这似乎是一个经常要求的function。
可能最好的方法是通过文件权限,正如@artifex所build议的那样。
正如@Weboide所说,通过sshfs是不可能的。
但是我想你可以创build一个简单的脚本,我们称之为sudossh ,它将把你的$PWD ,转换为/home/delta/并通过ssh和sudo在远程机器上运行命令。
像这样的东西:
#!/usr/bin/env bash ssh -t charlie@bravo "cd `pwd | sed 's/user\/foo/delta/'`; sudo -u delta $*"
之后,您可以执行sudossh command并记住使用相对path。
如果你使用ssh-agent,你只需要input你的sudo密码。
您可以使用bindfs + sshfs来访问其他用户文件(甚至根目录)。
首先,你用你的用户挂载你的“根”或任何其他目录,重新映射的uid。
ssh -t USER@SERVER "mkdir ~/tmproot; sudo bindfs --map=root/USER / ~/tmproot"
然后简单地把sshfs放到目录中。
sshfs USER@SERVER:tmproot TARGET
但是为了安全起见,最好不要映射整个根目录,但只包含你需要的部分。 例如:您可以使用此方法将任何其他用户目录挂载到您的(例如/ var / www中的文件)到〜/ www中,并将root重新映射到您的用户,以便您可以完全访问它。
如果你需要访问来保存uid或有权访问多个用户,那么我会创build一个新的用户,例如uid = 0和/ bin / false的“rootfs”,并执行正常的sshfs。