SFTP 的临时 SSH 访问

SFTP 的临时 SSH 访问

我有一个家庭服务器,它向一组用户托管共享文件。添加新用户时,我(过去)设置了属于“仅 SFTP”组的用户帐户,该组将它们chroot到共享目录(使用 sshd_config)。为他们创建一个只有他们可以写入的个人文件夹,其中包含用于私钥身份验证的authorized_keys 文件。作为用户创建过程的一部分,我在服务器上创建公钥/私钥对,然后将公钥写入他们的authorized_keys文件(在我的服务器上),并通过电子邮件将私钥发送给他们(以及包含有用说明和信息的欢迎消息)以便他们能够连接。

我意识到,通过这样做,我违背了使用密钥的目的,因为私钥是通过电子邮件发送的,而我作为管理员拥有一份副本(并且可以冒充用户)。现在,虽然安全性在这种情况下并不是特别重要,但我想正确地做事,并希望这个问题和提供的任何答案能够帮助其他确实需要以这种方式提高安全性的人。

我理想的解决方案是通过电子邮件向用户提供私钥(按照我以前的方法),该私钥将在“X”期限(可能几天)后过期,此时密钥将变得不可用。在此期间,预计用户需要更换自己提供的公钥/私钥,因为密钥会自动过期,因此这是必要的。通过这种方式,我可以轻松设置一个用户帐户,其他人可以访问该帐户,而无需:

  • 允许通过 SSH 进行密码身份验证(这还需要为他们提供密码并授予他们 shell 访问权限以更改该密码)
  • 预先提供请求公钥(这既会阻止用户注册,又会让我很难自动化该过程)。
  • 继续我目前的做法。

然后,用户将有机会获得自己的私钥/公钥集,并用自己的公钥替换authorized_keys 文件的内容。

我偶然发现文章解释了如何使用签名的公钥通过 ssh 提供临时访问。我花了很多时间研究这个问题,但一直没能让它发挥作用,也不明白什么似乎是一个核心概念——向客户(用户)提供经过认证的公钥。我不明白如何用公钥完成登录/授权过程?大多数指南都会涉及到该部分,只是指出公钥已提供给用户以“登录”,并且不会进一步详细说明。这是只能通过 SSH 而不能通过 SFTP 完成的事情吗?例如,在 filezilla 中授权时,我可以提供私钥,但不能提供公钥。进一步搜索似乎表明此方法(509x ??)将需要客户端配置(并且更多的是企业解决方案),因此可能不是我正在寻找的(因为这对于我的大多数用户来说太复杂) 。

对于我的问题有什么简单的解决方案吗?我是否错过了关键步骤或误解了某些内容?预先感谢您能够提供的任何帮助。

答案1

临时 OpenSSH 证书也是我根据您的需求推荐的解决方案。我自己还没有尝试过 SFTP。

主要是使用 SSH-CA 的私钥对用户的公钥进行签名,并添加更多元数据(例如有效期)。

然后在您的 SFTP 服务器上存储 SSH-CA 的公钥并使用 config 指令引用该文件TrustedUserCAKeys。使用 SSH-CA 的公钥,服务器在登录期间验证用户的 OpenSSH 证书。不再需要将授权密钥分发到服务器并在有效期后删除它们。

相关内容