沸点大火-blog

人生杂烩

Pam-Python实现SSH的短信双因素认证

首先需要简单了解一下Linux中的PAM模块。PAM(PluggableAuthentication Module,可插拔认证模块)机制,采用模块化设计和插件功能,使用户可以轻易地在应用程序中插入新的认证模块或替换原先的组件,同时不必对应用程序做任何修改。详细的PAM介绍可参考:http://www.infoq.com/cn/articles/linux-pam-one 。Pam_python是一款开源的python模块,它将需要使用C语言编写的PAM模块转换成了可以使用python语言编写。

接下来就介绍如何利用pam_python模块实现SSH的短信双因素认证。首先需要编译和安装pam_python模块。依次执行以下命令:

接下来就是编写python脚本实现SSH登陆的短信双因素认证。既然是短信双因素认证,就需要一个短信接口用来发送短信。

image.png

生成随机验证码并调用短信发送接口发送给用户手机号码。

image.png

最后是SSH登陆与用户交互过程并校验验证码的准确性。

image.png

完整代码内容如下:

保存脚本文件到/lib64/security/目录下,这里将脚本命名为:Multiauth.py。

接下来是配置SSHD,启用PAM的短信认证模块。

vi /etc/pam.d/sshd 添加一行内容如下:

image.png

同时需要启用ChallengeResponseAuthentication,修改/etc/ssh/sshd_config,将ChallengeResponseAuthentication设置为yes即可。

image.png

在上面的代码里面,获取用户手机号码的时候使用的方法是:pwd.getpwnam(user).pw_gecos,这里我将用户的手机号码信息存放在/etc/passwd文件中,当然可以根据需要存放在其他地方,这里只是用作演示。

image.png

一切配置完成之后,需要重启ssh服务:systemctl restart sshd.service

重启完成之后,使用gary账号ssh登陆目标主机时,就启用了短信双因素认证了。

image.png

如果在运行过程中发生错误,异常日志信息记录在/var/log/secure文件中,正常的运行日志记录在/var/log/messages中。