一般大家都是使用账号和密码远程SSH登录管理服务器。但SSH账号和密码很容易泄露,或者经常遭遇暴力破解。咨询过前同事赛赛,他们目前使用了谷歌身份验证器。查看了谷歌身份验证器的github网址和其它网上文档,重新整理归纳。
谷歌身份验证器生成的是动态验证码,默认30秒更新。修改配置,SSH登录必须在输入密码之前输入动态验证码。即使账号和密码泄露,验证码输入错误,仍然无法登录。苹果或者安卓手机端可以安装身份验证器App读取验证码。
1.禁用并关闭selinux
sed-i's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/configsetenforce0
2.安装依赖软件包
yum-yinstallgccmakepam-devellibpng-devellibtoolwgetgit
3.添加阿里云epel源
RHEL 6/CentOS 6系列
wget-O/etc/yum.repos.d/epel.repohttp://mirrors.aliyun.com/repo/epel-6.repo
RHEL 7/CentOS 7系列
wget-O/etc/yum.repos.d/epel.repohttp://mirrors.aliyun.com/repo/epel-7.repo
4.安装Qrencode,谷歌身份验证器需要调用该程序以便终端生成并显示二维码
yum-yinstallqrencode
5.安装谷歌身份验证器
mkdir-p/App/srccd/App/srcgitclonecdgoogle-authenticator/libpam/./bootstrap.sh./configuremakeinstallcp.libs/pam_google_authenticator.so/lib64/security/
6./etc/pam.d/sshd第一行后添加谷歌身份验证器PAM模块配置
authrequiredpam_google_authenticator.so
7.修改SSH服务配置/etc/ssh/sshd_config
sed-i's#^ChallengeResponseAuthenticationno#ChallengeResponseAuthenticationyes#'/etc/ssh/sshd_config
8.重启SSH服务
RHEL 6/CentOS 6系列
servicesshdrestart
RHEL 7/CentOS 7系列
systemctlrestartsshd.service
9.终端切换至需要二次验证的系统用户后运行验证器程序google-authenticator,遇到(y/n)可以都输入y,为需要远程SSH登录的每个用户生成动态口令
Doyouwantauthenticationtokenstobetime-based(y/n)yhttps://www.google.com/chart?chs=200x200 chld=M|0 cht=qr chl=otpauth://totp/songsong@localhost.localdomain%3Fsecret%3DX3PYDDGPI4BF3DMIVTZ33IRQI4%26issuer%3Dlocalhost.localdomainYournewsecretkeyis:X3PYDDGPI4BF3DMIVTZ33IRQI4Yourverificationcodeis318806Youremergencyscratchcodesare:3418184733327793543071633690175621117069Doyouwantmetoupdateyour"/home/songsong/.google_authenticator"file(y/n)yDoyouwanttodisallowmultipleusesofthesameauthenticationtoken?Thisrestrictsyoutooneloginaboutevery30s,butitincreasesyourchancestonoticeorevenpreventman-in-the-middleattacks(y/n)yBydefault,tokensaregoodfor30seconds.Inordertocompensateforpossibletime-skewbetweentheclientandtheserver,weallowanextratokenbeforeandafterthecurrenttime.Ifyouexperienceproblemswithpoortimesynchronization,youcanincreasethewindowfromitsdefaultsizeof+-1min(windowsizeof3)toabout+-4min(windowsizeof17acceptabletokens).Doyouwanttodoso?(y/n)yIfthecomputerthatyouareloggingintoisn'thardenedagainstbrute-forceloginattempts,youcanenablerate-limitingfortheauthenticationmodule.Bydefault,thislimitsattackerstonomorethan3loginattemptsevery30s.Doyouwanttoenablerate-limiting(y/n)y
10.苹果手机打开App Store搜索Google Authenticator,安卓手机打开应用商店搜索身份验证器,安装对应App
苹果手机
安卓手机
11.手机打开安装的App后点击开始设置
12.点击扫描条形码,扫描终端显示的二维码。需要安装专用条码扫描器,微信和QQ的扫描二维码不起作用
13.修改SecureCRT的连接属性,右键选择已有主机连接的Properties,在新弹窗点选SSH2,将Authentication选项中的Keyboard Interactive顺序调整至首行
终端运行验证器程序google-authenticator内容说明:
Doyouwantauthenticationtokenstobetime-based(y/n)
输入y基于时间方式生成验证口令,输入n使用计数器方式生成验证口令。
https://www.google.com/chart?chs=200x200 chld=M|0 cht=qr chl=otpauth://totp/songsong@localhost.localdomain%3Fsecret%3DX3PYDDGPI4BF3DMIVTZ33IRQI4%26issuer%3Dlocalhost.localdomain
显示二维码图片的地址,需要设法能够访问到谷歌,可以使用翻墙,或者寻找暂未被中国长城防火墙屏蔽的谷歌公网IP地址,然后修改系统hosts文件地址映射。
二维码
若未安装Qrencode,则不会显示二维码。
Yournewsecretkeyis:X3PYDDGPI4BF3DMIVTZ33IRQI4
若未显示二维码,生成的谷歌二维码图片地址亦无法访问,则进入手机端身份验证器设置后点选输入提供的密钥,填写运行google-authenticator程序的账户名及符号:之后的密钥也能达到同样的效果。
Yourverificationcodeis318806
临时生成的6位数字验证码,默认30秒到期。
Youremergencyscratchcodesare:3418184733327793543071633690175621117069
生成的5组应急备用验证码,每个验证码只能使用一次,使用后立即失效。当多次使用手机App端显示的验证码无效时使用,保存备用。
注意事项:
若使用默认基于时间方式生成动态口令,确保安装谷歌身份验证器的服务器和手机系统时间一致,否则无法登录系统。所以服务器和手机系统定期同步公网公开的时间服务器,这样可以确保两者时间一致。
坦然接受生活给你的馈赠吧,不管是好的还是坏的。