我知道我可以通过~/.ssh/config
或在客户端为特定用户/服务器创建快捷方式/etc/ssh/ssh_config
,但我想在服务器端做类似的事情。
也就是说,当我在客户端发出:
ssh [email protected]
我实际上是 chrooted 到
/home/jon/pub
关于name.server.top
我将在哪里使用 sftp。
在/etc/ssh/sshd_config
我见过的例子如下:
Subsystem sftp internal-sftp
Match user pub
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
还会进行以下工作吗?
ChrootDirectory /home/jon/pub
是否可以创建pub
一种虚拟用户?也就是说,远程用户登录,pub
并且他的公钥位于 中,因此根本/home/jon/.ssh/authorized_keys
不需要创建单独的目录/home/pub/.ssh/authorized_keys
或目录。/home/pub
答案1
如果它有效,你可能应该有:
ChrootDirectory /home/jon
- 的主目录
pub
刚刚/etc/passwd
设置为/pub
.
/home/jon
必须由 拥有root
且只能由 写入root
。
您还需要一个工作根目录,其中包含您需要的所有内容/home/jon
,例如bin
(用于 shell)、lib
(共享库)、etc
(用于 uid 到名称转换的 passwd)等。
它很可能不是您想要的 ChrootDirectory。
/etc/passwd
您可以尝试使用您希望的“别名”用户名以及 /home/jon 下的不同主目录创建多个条目。您可以为用户分配相同的数字 UID 和 GID jon
。
不过,我不确定公钥身份验证能否令人满意。尝试一下并发表评论。
答案2
我在虚拟机环境中对此进行了测试:SSH 服务器是 Cygwin(也是 VM 主机);客户端是 Arch Linux SSH(也是 VM guest)。
我使用了以下脚本。
我没有 chroot,因此不需要复制共享文件夹中的任何二进制文件,只需复制公钥。无论如何,我认为,使用内部 sftp(而不是 SSH),应该减少二进制要求。
#!/bin/sh
## Setup SFTP access on server side
## using an alias user and to a subdir of the aliased user home
## ------------------------------------------------------------
## Customise
## Shared path inside the aliased user home
sharedpath="/home/jon/pub"
## Aliased user name
altuser="pub"
## Path to the public key of aliased user
pubkey=~/.ssh/pub_rsa.pub
## Add aliased user to /etc/passwd
user=`grep ^$USER /etc/passwd`
txt="$altuser:`echo $user | cut -d: -f2-5`"
txt="$txt:$sharedpath:`echo $user | cut -d: -f7`"
echo $txt>>/etc/passwd
## Set user rules in sshd_config
txt="Match User $altuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
"
echo "$txt" >>/etc/ssh/sshd_config
## Copy the public key in the shared folder
mkdir -p "$sharedpath/.ssh"
cp "$pubkey" "$sharedpath/.ssh/"
## Format sftp line
echo "You can now run on the client (adjust paths accordingly):"
echo "sftp -i ${pubkey%.*} [email protected]"
答案3
您可能可以(ab)使用AuthorizedKeysCommand
从所有主目录获取公钥的选项,尽管这似乎有点不切实际。
至于 chroot,请仔细阅读ChrootDirectory
chroot 中的交互式会话需要的很多内容。