我想将公钥授权添加到我的sftp chroot目录,但我总是得到:
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/test/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey).
Couldn't read packet: Connection reset by peer
Chroot有效,因为可以使用密码进行授权。 我在没有chroot的主机上有其他帐户,它可以使用此密钥。 我尝试了很多次,但它仍然没有用。
在auth.log中的服务器上只有: 连接由xxx [preauth]
关闭这是我的目录:
ls -laR /sftp/
/sftp/:
total 12
drwxr-xr-x 3 root root 4096 May 3 16:55 .
drwxr-xr-x 23 root root 4096 May 3 14:46 ..
drwxr-xr-x 3 root root 4096 May 3 16:45 backup
/sftp/backup:
total 12
drwxr-xr-x 3 root root 4096 May 3 16:45 .
drwxr-xr-x 3 root root 4096 May 3 16:55 ..
drwxr-xr-x 3 backup sftpusers 4096 May 3 16:55 incoming
/sftp/backup/incoming:
total 12
drwxr-xr-x 3 backup sftpusers 4096 May 3 16:55 .
drwxr-xr-x 3 root root 4096 May 3 16:45 ..
drwx------ 2 backup sftpusers 4096 May 3 21:06 .ssh
/sftp/backup/incoming/.ssh:
total 12
drwx------ 2 backup sftpusers 4096 May 3 21:06 .
drwxr-xr-x 3 backup sftpusers 4096 May 3 16:55 ..
-rw------- 1 backup sftpusers 391 May 3 21:06 authorized_keys
我的用户:
backup:x:1002:1003::/incoming:/usr/sbin/nologin
我的ssh配置:
Match Group sftpusers
ChrootDirectory /sftp/%u
AuthorizedKeysFile /sftp/backup/incoming/.ssh/authorized_keys
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
请帮忙。
答案 0 :(得分:15)
我尝试了这个解决方案(将AuthorizedKeysFile放入Match块)并sshd -T
抱怨:
/etc/ssh/sshd_config line 153: Directive 'AuthorizedKeysFile' is not allowed within a Match block
(RHEL 6.6,openssh 5.3p1-104)
解决方案:authorized_keys文件(和用户的.ssh目录)必须存在于chroot目录的/ etc / passwd,外部定义的主目录位置。
例如(使用OP usernames / uids):
/ etc / passwd中:
backup:x:1002:1003::/home/backup:/sbin/nologin
创建由root拥有的目录/home/backup
创建目录/home/backup/.ssh
,将所有权更改为备份,chmod 700 /home/backup/.ssh
将authorized_keys文件复制到/home/backup/.ssh
,chmod 400 authorized_keys
ls -laR /home
/home:
total 12
drwxr-xr-x 3 root root 4096 Jul 9 12:25 .
drwxr-xr-x 3 root root 4096 Sep 22 2014 ..
drwxr-xr-x 3 root root 4096 Jul 9 12:25 backup
/home/backup:
total 12
drwxr-xr-x 3 root root 4096 Jul 9 12:25 .
drwxr-xr-x 3 root root 4096 Jul 9 12:25 ..
drwx------ 3 backup sftpusers 4096 Jul 9 12:28 .ssh
/home/backup/.ssh:
total 12
drwx------ 3 backup sftpusers 4096 Jul 9 12:28 .
drwxr-xr-x 3 root root 4096 Jul 9 12:25 ..
-r-------- 3 backup sftpusers 391 Jul 9 12:29 authorized_keys
/ etc / ssh / sshd_config变为:
Match Group sftpusers
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
chroot目录结构是:
ls -laR /sftp/
/sftp/:
total 12
drwxr-xr-x 3 root root 4096 May 3 16:55 .
drwxr-xr-x 23 root root 4096 May 3 14:46 ..
drwxr-xr-x 3 root root 4096 May 3 16:45 backup
/sftp/backup:
total 12
drwxr-xr-x 3 root root 4096 May 3 16:45 .
drwxr-xr-x 3 root root 4096 May 3 16:55 ..
drwxr-xr-x 3 backup sftpusers 4096 May 3 16:55 incoming
drwxr-xr-x 3 root root 4096 May 3 16:55 home
/sftp/backup/incoming:
total 12
drwxr-xr-x 3 backup sftpusers 4096 May 3 16:55 .
drwxr-xr-x 3 root root 4096 May 3 16:45 ..
/sftp/backup/home:
total 12
drwxr-xr-x 3 root root 4096 May 3 16:55 .
drwxr-xr-x 3 root root 4096 May 3 16:45 ..
drwx------ 2 backup sftpusers 4096 May 3 21:06 backup
/sftp/backup/home/backup:
total 12
drwx------ 3 backup sftpusers 4096 May 3 21:06 .
drwxr-xr-x 3 root root 4096 May 3 16:55 ..
注意:/sftp/backup/home/backup
为空,只提供一个看似非chroot /home/backup
的路径 - .ssh
目录为/home/backup/.ssh
不 /sftp/backup/home/backup/.ssh
答案 1 :(得分:8)
问题已解决。
我改变了它: AuthorizedKeysFile /sftp/backup/incoming/.ssh/authorized_keys 至: AuthorizedKeysFile /sftp/%u/.ssh/authorized_keys
答案 2 :(得分:1)
Stephen Buchanan's answer(可解决RHEL6无法在Match块中设置AuthorizedKeys的问题)将密钥分为/home
,内容分为/sftp
,但可以将所有内容都放在{{ 1}}。
您可以通过在用户的主目录下创建其chroot来执行此操作。例如,在/home
中,将chroot设置为sshd_config
:
/home/<user>/sftp
像以前一样,确保Match Group sftphome
ChrootDirectory /home/%u/sftp
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
由root拥有,并将.ssh密钥放置在/home/<user>
中,以使用户具有读取权限。现在创建/home/<user>/.ssh
,所有目录均由root拥有,但最后一个/home/<user>/sftp/home/<user>
应该由用户拥有。最后,确保用户的主目录位于/ etc / passwd中的<user>
。
现在,当用户登录时,根据/home/<user>
在/home/<user>/.ssh
中查找ssh密钥,将chroot写入/etc/passwd
,然后将/home/<user>/sftp
放入chroot的cd
内部 中。换句话说,用户的远程工作目录将显示为/home/<user>
。
您可以选择在/home/<user>
下或/home/<user>/sftp/home/<user>
下的任何位置绑定挂载目录(从用户的角度来看,这是/home/<user>/sftp
)。
可以省略/
目录,创建sftp/
并将chroot插入/home/<user>/home/<user>
,但这可能会引起混淆,因为/home/<user>
目录和其他文件将会显示为他们的.ssh
中的用户。 /
目录使内容保持整洁。
注意:实际上,如果缺少用户的主目录,sftp/
通常只是sftp
到cd
中。您可以通过不在chroot中创建/
来滥用此属性,因此用户从/home/<user>
而不是/
开始。这有点脆弱,但可以派上用场。