云网牛站
所在位置:首页 > Linux云服务器 > 在Ubuntu 18.04服务器上设置SSH双因素身份验证的方法

在Ubuntu 18.04服务器上设置SSH双因素身份验证的方法

2019-03-18 10:45:13作者:雷增线稿源:云网牛站

本文介绍使用Google身份验证器在Ubuntu 18.04服务器上设置SSH双因素身份验证的方法,它能提高OpenSSH服务器的安全性。本文也适用于Ubuntu 18.10版本,其它Linux系统的设置方法请参考在Fedora系统上为SSH设置双因素身份验证的方法

 

两因素认证的工作原理

通常,你只需输入密码或使用SSH密钥远程登录Ubuntu服务器,双因素身份验证(2FA)要求你输入两条信息才能登录,因此,你还需要输入基于时间的一次性密码才能登录SSH服务器,该一次性密码使用TOTP算法计算,该算法是IETF标准,如今,许多网站和服务(Facebook、谷歌、Twitter等)为用户提供2FA保护他们的帐户,并且最好在SSH服务器上启用2FA。

本文将向你展示如何设置:

1、使用一次性密码进行密码验证。

2、使用一次性密码进行公钥认证。

注意:我们将在本文中使用的开源服务器软件称为libpam-google-authenticator,它是从默认的Ubuntu存储库安装的,谷歌公司不以任何形式或形式参与认证过程,服务器软件和移动应用程序不需要网络访问。

 

一、在Ubuntu 18.04服务器上安装和配置Google身份验证器

登录到你的Ubuntu服务器并运行以下命令从默认的Ubuntu软件包存储库安装Google Authenticator:

sudo apt install libpam-google-authenticator

然后运行google-authenticator命令在主目录中创建新的密钥:

google-authenticator

当提示“Do you want authentication tokens to be time-based?”时回答y:

在Ubuntu 18.04服务器上设置SSH双因素身份验证的方法

然后,将看到可以使用手机上的TOTP应用程序扫描的QR码,Google Authenticator是最知名的TOTP移动应用,通过手机上的Google Play或Apple应用程序商店安装Google身份验证器应用程序并扫描QR码,请注意,需要放大终端窗口以扫描完整的QR码。

Google身份验证器移动应用不是开源的,如果你不信任Google,可以使用由Red Hat开发的开源TOTP移动应用程序FreeOTP:

在Ubuntu 18.04服务器上设置SSH双因素身份验证的方法

QR代码表示密钥,只有你的SSH服务器和你的Google身份验证器应用程序才知道密钥,扫描QR码后,可以在手机上看到六位一次性密码,默认情况下,它持续30秒,需要稍后输入此一次性密码才能通过SSH登录Ubuntu服务器:

在Ubuntu 18.04服务器上设置SSH双因素身份验证的方法

在终端窗口中,可以看到密钥、验证码和emergency scratch代码,建议你将这些信息保存到安全的地方供以后使用。

然后你可以输入y来回答所有剩余的问题,这将更新您的Google身份验证器配置文件,禁用对同一身份验证令牌的多次使用,增加时间窗口并启用速率限制以防止暴力登录尝试:

在Ubuntu 18.04服务器上设置SSH双因素身份验证的方法

 

二、配置SSH守护程序以使用Google身份验证器

打开SSH服务器配置文件:

sudo nano /etc/ssh/sshd_config

在文件中找到以下两个参数,并确保它们都设置为yes:

UsePAM yes

ChallengeResponseAuthentication yes

PAM代表可插拔认证模块,它提供了一种将不同的身份验证方法插入Linux系统的简便方法,要使用SSH启用Google身份验证器,必须启用PAM和challenge - 响应身份验证,保存并关闭文件,然后重新启动SSH守护程序以使更改生效:

sudo systemctl restart ssh

注意:要允许root用户使用2FA,必须先使用此配置允许root用户通过SSH登录PermitRootLogin yes,它不能是PermitRootLogin no或PermitRootLogin prohibit-password。

默认情况下,challenge响应身份验证要求你输入用户密码才能登录,现在编辑SSH守护程序的PAM规则文件:

sudo nano /etc/pam.d/sshd

在此文件的开头,可以看到以下行,当ChallengeResponseAuthentication设置为yes时,该行启用密码身份验证:

@include common-auth

要同时启用一次性密码验证,请添加以下两行:

#One-time password authentication via Google Authenticator

auth required pam_google_authenticator.so

在Ubuntu 18.04服务器上设置SSH双因素身份验证的方法

保存并关闭文件,从现在开始,SSH守护程序将要求你输入用户密码和验证码(由Google身份验证器生成的一次性密码):

在Ubuntu 18.04服务器上设置SSH双因素身份验证的方法

 

三、如何启用公钥认证和一次性密码认证

在SSH安全性方面,建议你使用公钥身份验证而不是用户密码身份验证,参考SSH无密码登录:只需两个简单步(针对Linux系统)一文。

设置公钥认证并执行上述两个步骤后,可以将公钥认证与一次性密码认证相结合。

编辑SSH守护程序配置文件:

sudo nano /etc/ssh/sshd_config

在上一步中,我们启用了challenge - 响应身份验证,现在我们希望让SSH守护程序知道用户必须同时传递公钥身份验证和challenge - 响应身份验证,在此文件的末尾添加以下行:

AuthenticationMethods publickey,keyboard-interactive

保存并关闭文件,重新启动SSH守护程序以使更改生效:

sudo systemctl restart ssh

我们还需要编辑SSH PAM配置文件:

sudo nano /etc/pam.d/sshd

注释掉以下行(在开头添加#)以禁用用户密码身份验证:

@include common-auth

保存并关闭文件,从现在开始,你需要使用SSH密钥和Google身份验证器验证码才能登录。

 

注意事项

1、Ubuntu服务器上的每个用户都需要运行google-authenticator命令并扫描QR码才能使用双因素身份验证,如果用户未设置并尝试登录,则将显示错误消息“Permission denied (keyboard-interactive)”。

2、Emergency Scratch Code是你的备用代码,如果你丢失了手机,则可以输入五个Emergency Scratch Code中的一个而不是一次性密码来完成两步验证,这些代码仅供一次性使用。

3、如果要更改密钥,只需登录服务器并再次运行google-authenticator命令即可更新~/.google_authenticator文件。

4、由于使用共享密钥和当前时间计算一次性密码,因此在Ubuntu服务器上启用NTP时间同步是个好方案,参考在Linux系统下安装配置Chrony,使其成为NTP客户端替代品一文。

注:经过以上操作,已经在Ubuntu 18.04服务器上设置好SSH双因素身份验证,它使服务器的安全性得到了进一步的巩固。

 

相关主题

启用Ubuntu Server的SSH多重身份验证

精选文章
热门文章