将 OpenSSH 配置为首选公钥身份验证,回退到空密码身份验证

Sco*_*rth 6 ssh public-key

我想使用空密码为服务帐户(我们称之为“serviceacct”)配置 OpenSSH 6.2p2,它执行以下操作:

  1. 先尝试公钥认证;如果成功,则运行authorized_keys 文件中指定的强制命令。
  2. 回退到空密码身份验证并运行在其他地方指定的强制命令。

本质上,这将为已知用户提供一种行为,而为匿名用户提供另一种行为。

在理想的世界中, sshd_config 中的这些设置会做我想要的:

PubkeyAuthentication yes
PasswordAuthentication yes
Match User serviceacct
  PermitEmptyPasswords yes
  ForceCommand /my/program
Run Code Online (Sandbox Code Playgroud)

但我遇到了几个问题:

  1. ForceCommand /my/program 覆盖authorized_keys 文件中设置的强制命令。
  2. 使用空密码似乎优先于公钥身份验证。

除了修改OpenSSH服务器之外,有没有办法解决这两个问题?我能想到的一个明显的解决方法是只使用两个服务帐户 - 一个用于仅使用公钥身份验证的已知用户,另一个用于仅使用空密码身份验证的匿名用户。如果可能,我试图避免拥有两个用户帐户。

编辑 - 为什么我喜欢这种行为

我正在构建一个托管各种版本控制系统存储库(Subversion、Git 和 Mercurial)的服务。想想 GitHub 或 Bitbucket,但在本地托管(这是关键,因为我们的一些工作不能离开我们的网站)。可以说,这些版本控制系统通用的最简单的访问方法是 SSH。

每个存储库都有针对已知和匿名用户的可配置访问规则。我希望能够为任何版本控制系统使用相同的 URL 来支持已知和匿名用户。由于托管存储库的用户是 URL(例如ssh://user@host/path)的一部分,因此拥有两个不同的用户 - 一个用于已知用户,另一个用于匿名用户 - 将需要两个不同的 URL。

我应该澄清一个技术问题:我实际上是AuthorizedKeysCommand在 sshd_config 中使用指令,它指示 sshd 使用外部程序的输出而不是读取 ~/.ssh/authorized_keys 文件。

poi*_*ige 0

不是这个事吗?

\n\n

\xe2\x80\x94 man /etc/ssh/sshd_config

\n\n
    \n
  • AuthenticationMethods\n\n
      \n
    • 指定必须成功完成才能授予用户访问权限的身份验证方法。此选项后必须跟一个或多个以逗号分隔的身份验证方法名称列表。成功的身份验证要求至少完成其中一个列表中的每一种方法。
    • \n
    • 例如,参数publickey,password publickey,keyboard-interactive要求用户完成公钥身份验证,然后是密码或键盘交互式身份验证。每个阶段仅提供一个或多个列表中的下一个方法,因此对于本示例,不可能在公钥之前尝试密码或键盘交互式身份验证。
    • \n
  • \n
\n