configurationOpenSSH更喜欢公共密钥authentication,回退到空密码authentication

我想用一个空的密码来configurationOpenSSH 6.2p2作为一个服务帐户(我们将其称为“serviceacct”),它将执行以下操作:

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

从本质上讲,这会给已知的用户一个行为,并为匿名用户提供另一个行为。

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

PubkeyAuthentication yes PasswordAuthentication yes Match User serviceacct PermitEmptyPasswords yes ForceCommand /my/program 

但是我遇到了一些问题:

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

有没有办法解决这两个问题,修改OpenSSH服务器? 我能想到的一个明显的解决方法是仅使用两个服务帐户 – 一个用于仅使用公钥authentication的已知用户,另一个用于仅使用空密码authentication的匿名用户。 我试图避免有两个用户帐户,如果可能的话。

编辑 – 为什么我会喜欢这种行为

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

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

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