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 (安全外壳协议)为 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
## chrony服务管理
启动:systemctl start chronyd
重启:systemctl restart chronyd
关闭:systemctl stop chronyd
开机启动:systemctl enable chronyd
查看状态:systemctl status chronyd
四、安装google-authenticator
方法一:YUM安装,安装的版本比较老,但不影响使用。
yum -y install google-authenticator
方法二:源码编译安装
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
或使用命令
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
(是否基于时间的认证,为了防止不同跨时区的问题)
## 输入y后,会出现一个二维码和几组数字,请通过身份验证器APP扫描添加。
## 这里的几组数字,这就是紧急密码,可以通过这个来登陆服务器,记住,一个只能用一次,可登陆服务器后重新生成。
## 下面的提示可以根据自己需要来设置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验证”,单击“”连接“。如下图
## 输入用户名,勾选"记住用户名",如下图:
## 输入用户密码。
## 输入google-authenticator应用APP上生成的验证码。
## 注意输入用户密码和验证码两个窗口的提示会出现顺序变化,我们根据提示信息输入相关信息即可。
如下图所示,即登录成功。
## 查看服务端的安全日志文件,可以看到进行了google动态密码认证
八、特别说明
1.用password google authenticator,如果使用公钥登录的话,会跳过google authenticator验证直接登录服务器的。
2.务必注意服务器时间需要和本地时间一致,否则登陆认证会出现问题,一般我们都是使用国外机器,时区相差较大,请使用前利用date查询当前时间,若时间和本地不一致,请进行时间矫正:ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime