我在服务器上有一个帐户,我需要将 sftp 访问权限授予另一个人。然而,这个人只需要访问一小部分目录。是否可以在不创建另一个用户帐户的情况下将 ssh 密钥限制为该目录子集。
基本上,这些目录所在的网站位于特定用户帐户的主目录中。我宁愿不必创建一个单独的用户帐户来锁定这些目录的使用。如果可以使用理想的 ssh 密钥锁定对特定目录的访问。
这是可能的,但它有点像黑客。更受欢迎、更简单的方法是仅授予该用户对某些文件和目录的权限。
这是关于如何使用 ssh 而不是 sftp 实现目标的答案。这有一些机会被 OP 接受,因为它仍然使用 ssh 工具链。
该技术使用 ssh 的一项功能,该功能允许 ssh 基于提供给主机的私钥运行命令。当主机看到该密钥时,它会运行相关的命令。对于命令,我们将使用“cat”来转储文件。
~mr_user/.ssh/authorized_keys2
command="/usr/bin/cat ~/sshxfer/myfile.tar.gz.uu",no-port-forwarding ssh-dss xxxPUBLIC_KEYxxx mr_user@tgtmach
uuencode -m myfile.tar.gz /dev/stdout >~mr_user/sshxfer/myfile.tar.gz.uu
ssh -i ~/keys/privatekey.dsa mr_user@srcmach |sed -e's/
//g' |uudecode >myfile.tar.gz
该命令的棘手部分是 sed 命令中有一个换行符,用于从 .uu 文件中删除换行符。
我没有找到一种方法来传递要传输的文件名,因此我必须为每个要传输的文件创建一个密钥。这对我的用例来说没问题,因为我只有两个要传输的文件。