Debian:如何检测用户第一次使用SFTP连接?

我试图设置以下内容:只允许通过ssh密钥访问OpenSSH sftp服务器,即不允许使用密码authentication。 SSH密钥在服务器上自动生成。 该服务器旨在用作Web托pipe服务器,每个网站只有一个用户。 这些用户只允许sftp访问,没有shell。

为了让新用户能够通过sftp检索他们的密钥,我们允许他们第一次通过密码login(只有第一次!)。 密码是通过短信发送的,每个新用户的连接和获取密钥的时间都是有限的。 第一次成功连接后,密码访问被禁用,只允许该用户进行基于密钥的访问。

我已经configuration了此工作stream程的所有步骤,除了一个:我如何检测新用户第一次通过sftp连接? 除了parsing日志以外,有没有优雅的方法?

我可以考虑两种比parsing日志更多的方法。

  1. 安装incron。 然后,您可以创build一个脚本来执行文件读取和closures。 该脚本可以locking密码访问等
  2. 使用OTP(一次性密码)。 这是一个完美的解决scheme。 http://www.linotp.org/doc/latest/index.html

我会和#2一起去,但是如果情况变得更复杂的话,#1会很有用。

回答我自己的问题,指出另一种不需要安装额外软件的方法:PAM模块pam_exec。 我从这里得到了灵感(类似的问题,不同的背景):在我的情况下,这是有道理的

auth optional pam_exec.so /path/to/command 

在/etc/pam.d/ssh文件中。 这只有在ssh / sftp进行密码authentication时才会运行,而不是在进行基于密钥的authentication时运行。 然后,/ path / to /命令中的命令可以

  • 将用户分配给仅允许执行基于密钥的身份validation的组(在sshd_config中为MatchGroup指令)。

要么

  • 添加用户名到一个简单的文本文件。 如果在/etc/pam.d/ssh文件中input“auth required pam_listfile.so item = user sense = deny file = / path / to / text / file”,pam_listfile模块会在下次拒绝该用户。

有关PAM的优秀教程,包括我提到的两个模块,请参阅以下链接:

http://linuxtutorial.info/modules.php?name=Howto&pagename=User-Authentication-HOWTO/x115.html

http://susefaq.sourceforge.net/howto/pam.html