我试图设置以下内容:只允许通过ssh密钥访问OpenSSH sftp服务器,即不允许使用密码authentication。 SSH密钥在服务器上自动生成。 该服务器旨在用作Web托pipe服务器,每个网站只有一个用户。 这些用户只允许sftp访问,没有shell。
为了让新用户能够通过sftp检索他们的密钥,我们允许他们第一次通过密码login(只有第一次!)。 密码是通过短信发送的,每个新用户的连接和获取密钥的时间都是有限的。 第一次成功连接后,密码访问被禁用,只允许该用户进行基于密钥的访问。
我已经configuration了此工作stream程的所有步骤,除了一个:我如何检测新用户第一次通过sftp连接? 除了parsing日志以外,有没有优雅的方法?
我可以考虑两种比parsing日志更多的方法。
我会和#2一起去,但是如果情况变得更复杂的话,#1会很有用。
回答我自己的问题,指出另一种不需要安装额外软件的方法:PAM模块pam_exec。 我从这里得到了灵感(类似的问题,不同的背景):在我的情况下,这是有道理的
auth optional pam_exec.so /path/to/command
在/etc/pam.d/ssh文件中。 这只有在ssh / sftp进行密码authentication时才会运行,而不是在进行基于密钥的authentication时运行。 然后,/ path / to /命令中的命令可以
要么
有关PAM的优秀教程,包括我提到的两个模块,请参阅以下链接:
http://linuxtutorial.info/modules.php?name=Howto&pagename=User-Authentication-HOWTO/x115.html