快捷搜索:  汽车  科技

ssh配置免密码登录(Linux下SSH登录设置双因素身份验证)

ssh配置免密码登录(Linux下SSH登录设置双因素身份验证)测试服务器IP:192.168.168.100OS:CentOS7.8 x64 内核:3.10.0-1160.15.2.el7.x86_64Google Authenticator项目地址:https://github.com/google/google-authenticator-libpam参考资料:https://www.tecmint.com/ssh-two-factor-authentication/二、环境说明

一、概述

ssh配置免密码登录(Linux下SSH登录设置双因素身份验证)(1)

SSH (安全外壳协议)为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。

谷歌身份验证器Google Authenticator是谷歌推出的一款动态口令工具,解决大家各平台账户遭到恶意攻击的问题,一般在相关的服务平台登陆中除了用正常用户名和密码外,需要再输入一次谷歌认证器生成的动态口令才能验证成功,相当于输入二次密码,以达到账户的高安全性。例如交易所、金融平台、以及一些钱包等项目等等,都会使用谷歌身份验证器Google Authenticator来做二次认证。

谷歌身份验证器Google Authenticator就像银行的像U盾、电子口令卡一样,当你网银转账时候,除了输入银行密码还不行,再次输入U盾、或电子口令卡显示的数字确认完成转账。谷歌身份验证器Google Authenticator的动态码是30秒变动一次的,所以读取到之后要尽快输入。

Google Authenticator项目地址:https://github.com/google/google-authenticator-libpam

参考资料:https://www.tecmint.com/ssh-two-factor-authentication/

二、环境说明

OS:CentOS7.8 x64 内核:3.10.0-1160.15.2.el7.x86_64

测试服务器IP:192.168.168.100

关闭selinux

所需组件软件:mercurial、pam、pam-devel、libpng、libpng-devel、chrony(时间同步软件,或者使用ntp)

三、依赖组件安装

1.基础依赖组件

rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

yum -y install gcc make mercurial pam pam-devel zlib zlib-devel libpng libpng-devel

2.时间同步软件chrony

因为动态口令在验证时用到了时间,所以要保持时间上的一致性。简单说下:chrony 是网络时间协议的(NTP)的另一种实现,与网络时间协议后台程序(ntpd)不同,它可以更快地更准确地同步系统始终。如果要使用ntp 需要单独安装。

如果时区不对的话,可以拷贝你当前地区所在地的时区到系统运行的时区,如下:

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

## 安装

yum -y install chrony

## 修改配置文件,删除原有的server配置,添加如下配置

vim /etc/chrony.conf

server 0.cn.pool.ntp.org iburst server 1.cn.pool.ntp.org iburst server 2.cn.pool.ntp.org iburst

## 启动服务并使用命令查看同步

systemctl start chronyd

chronyc sources

ssh配置免密码登录(Linux下SSH登录设置双因素身份验证)(2)

## chrony服务管理

启动:systemctl start chronyd

重启:systemctl restart chronyd

关闭:systemctl stop chronyd

开机启动:systemctl enable chronyd

查看状态:systemctl status chronyd

四、安装google-authenticator

方法一:YUM安装,安装的版本比较老,但不影响使用。

yum -y install google-authenticator

ssh配置免密码登录(Linux下SSH登录设置双因素身份验证)(3)

方法二:源码编译安装

cd /data/tools

git clone https://github.com/google/google-authenticator-libpam.git

cd google-authenticator-libpam/

wget https://github.com/google/google-authenticator-libpam/archive/1.09.tar.gz

tar xf 1.09.tar.gz

cd google-authenticator-libpam-1.09/

./bootstrap.sh

./configure

make && make install

cp /usr/local/lib/security/pam_google_authenticator.so /lib64/security/

ln -s /usr/local/lib/security/pam_google_authenticator.so /usr/lib64/security/pam_google_authenticator.so

五、配置

1.设置PAM组件

编辑pam.d下的sshd文件,在文件末尾添加如下内容

vi /etc/pam.d/sshd

auth required pam_google_authenticator.so

ssh配置免密码登录(Linux下SSH登录设置双因素身份验证)(4)

或使用命令

echo "auth required pam_google_authenticator.so" >>/etc/pam.d/sshd

2.设置SSH配置文件

编辑/etc/ssh/sshd_config,修改如下三个选项键值

PasswordAuthentication yes ChallengeResponseAuthentication yes UsePAM yes

重启SSH服务或重新导入SSH配置

systemctl restart sshd.service 或 systemctl reload sshd.service

3.配置google-authenticator

## 执行如下命令

google-authenticator

## 会出现以下提示:(看不懂请之后选项都输入y回车;)

Do you want authentication tokens to be time-based (y/n) y

(是否基于时间的认证,为了防止不同跨时区的问题)

ssh配置免密码登录(Linux下SSH登录设置双因素身份验证)(5)

## 输入y后,会出现一个二维码和几组数字,请通过身份验证器APP扫描添加。

ssh配置免密码登录(Linux下SSH登录设置双因素身份验证)(6)

## 这里的几组数字,这就是紧急密码,可以通过这个来登陆服务器,记住,一个只能用一次,可登陆服务器后重新生成。

ssh配置免密码登录(Linux下SSH登录设置双因素身份验证)(7)

## 下面的提示可以根据自己需要来设置y或者n,如果不清楚如何选择,建议全部设置为y即可。

第一个选项:是否更新用户的 Google Authenticator 配置文件,选择 y 才能使上面操作对当前 root 用户生效,其实就是在对应用户的 Home 目录下生成了一个 .google_authenticator 文件,如果你想停用这个用户的 Google Authenticator 验证,只需要删除这个用户 Home 目录下的 .google_authenticator 文件就可以了。

第二个选项:您是否要禁止多次使用同一身份验证令牌? 这样一来,您每30秒只能登录一次,但这种情况会增加您发现甚至阻止中间人攻击的机会。

第三个选项:默认情况下,移动应用程序每30秒生成一个新令牌。为了补偿客户端和服务器之间的时间偏差,我们允许在当前时间前后添加一个额外的令牌。 这允许身份验证服务器和客户端之间的时间偏差最多为30秒。 如果你遇到时间同步不良的问题,可以增加窗口(默认值为3个允许的代码)(前一个代码,代码,下一个代码)到17个允许的代码(前8个代码,当前代码,以及接下来的8个代码)。 这将允许长达4分钟的时间偏差在客户端和服务器之间。您要这么做吗?

第四个选项:如果您正在登录的计算机没有针对暴力登录尝试进行增强,则可以为验证模块启用速率限制。默认情况下,这将限制攻击者每30秒不超过3次登录尝试。是否要启用速率限制?

六、手机客户端使用

手机客户端使用本文中不做介绍,安装好APP后,扫描二维码或使用密钥添加账号。

google-authenticator安卓客户端下载:https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=zh

七、验证

本文中使用SSH客户端是xshell。在左侧栏中展开“连接”→“用户身份验证”,然后验证方法选择“Keyboard Interactive验证”,单击“”连接“。如下图

ssh配置免密码登录(Linux下SSH登录设置双因素身份验证)(8)

## 输入用户名,勾选"记住用户名",如下图:

ssh配置免密码登录(Linux下SSH登录设置双因素身份验证)(9)

## 输入用户密码。

ssh配置免密码登录(Linux下SSH登录设置双因素身份验证)(10)

## 输入google-authenticator应用APP上生成的验证码。

ssh配置免密码登录(Linux下SSH登录设置双因素身份验证)(11)

## 注意输入用户密码和验证码两个窗口的提示会出现顺序变化,我们根据提示信息输入相关信息即可。

如下图所示,即登录成功。

ssh配置免密码登录(Linux下SSH登录设置双因素身份验证)(12)

## 查看服务端的安全日志文件,可以看到进行了google动态密码认证

ssh配置免密码登录(Linux下SSH登录设置双因素身份验证)(13)

八、特别说明

1.用password google authenticator,如果使用公钥登录的话,会跳过google authenticator验证直接登录服务器的。

2.务必注意服务器时间需要和本地时间一致,否则登陆认证会出现问题,一般我们都是使用国外机器,时区相差较大,请使用前利用date查询当前时间,若时间和本地不一致,请进行时间矫正:ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

猜您喜欢: