当前位置: 首页 > 知识库问答 >
问题:

sftp chroot目录上的公钥授权

太叔鹏云
2023-03-14

我想将公钥授权添加到我的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

请帮帮忙。

共有1个答案

沃瑾瑜
2023-03-14

我尝试了此解决方案(将AuthorizedKeysFile放入Match块),但sshd-t抱怨:

/etc/ssh/sshd_config line 153: Directive 'AuthorizedKeysFile' is not allowed within a Match block

(RHEL 6.6、openssh 5.3 P1-104)

解决方案:authorized_keys文件(和用户的.ssh目录)必须存在于chroot目录之外的/etc/passwd定义的主目录位置中。

例如(使用OP用户名/UID):
/etc/passwd:

backup:x:1002:1003::/home/backup:/sbin/nologin

创建目录/home/backup,由root拥有
创建目录/home/backup/.ssh,将所有权更改为backup,chmod 700/home/backup/.ssh
将authorized_keys文件复制到/home/backup/.sshchmod 400authorized_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

 类似资料:
  • 我有一个图形API应用程序,并希望它是可访问的每一个用户的授权。 该应用程序是一个多租户应用程序,每个人都可以使用(见屏幕截图)1。 当未添加到azure active directory的用户尝试访问以授予应用程序权限时,他们会得到这样的错误,即“该用户未添加到azure active directory,并且该用户需要作为租户添加到应用程序”。 我正在使用此链接进行oauth访问https:/

  • 当我使用JAVA API将数据放入hdfs时,我必须为hdfs目标目录提供许可。我尝试了以下代码: 我有以下错误

  • 本文向大家介绍Secure Shell 将您的公钥添加到服务器用户的授权密钥列表中,包括了Secure Shell 将您的公钥添加到服务器用户的授权密钥列表中的使用技巧和注意事项,需要的朋友参考一下 示例 为了ssh进入服务器,必须将您身份的公共密钥添加到受信任密钥列表中。最常见的做法是按用户完成: 也可以手动完成: 之后,将身份文件传递给ssh呼叫时,您应该能够登录而无需提供用户密码。

  • 问题内容: 我有以下格式的公钥 我需要将其转换为以下格式 基本上,问题是我正在使用用Java编写的第三方库。 第三方库使用Java类“ RSAPublicKeySpec”从字符串生成RSAPublicKey类型的实例。 我提供给该第三方库的字符串取自以下格式的文件: 仔细研究一下代码之后,我可以看到,如果我使用java类“ X509EncodedKeySpec”来加载此公共密钥,则代码的签名验证部

  • Using a delegation key The collaborator can now push to the repository using Docker Content Trust. Docker will automatically choose and pick the right key for the targets/release role. Edit the file o

  • Auth0提供了两个JWT库,一个用于Node:Node jsonwebtoken,另一个用于Java:Java JWT。 我创建了私有/公钥对,并在Node中成功地使用了node-jsonwebToken: 但是我发现没有办法在java-jwtJava做同样的事情。 有人有一个如何在Java中为JWT使用私钥/公钥的工作示例吗?