公司线上的使用机器不能让用户随意的登陆,所以就不能让开发随意的登陆到生产的机器的。于是就打算使用google-auth的验证方式呢。

  如果google-auth的方式。

 搭建google-authenticator:

  搭建这个很简单,如下:

  git clone https://github.com/google/google-authenticator-libpam 下载最新的google auth 最新版。

  cd google-authenticator-libpam/

  ./bootstrap.sh

  ./configure && make && make install

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

  修改/etc/pam.d/sshd,

  #最上方加一行 "auth required pam_google_authenticator.so"
   #这个配置可以更复杂一些,加上一些参数,详见 libpam/README
   #注:如果遇到仍然需要输入密码的情况,改成 "auth sufficient pam_google_authenticator.so" 试试。

  修改/etc/ssh/sshd_config

  将 ChallengeResponseAuthentication 选项的 no 改成 yes

  将 UsePAM yes

  service sshd restart

  生成密钥

  $ google-authenticator    #注:运行这个命令的是需要登录的用户,不是root用户
  Do you want authentication tokens to be time-based (y/n) y  (确认:基于时间的认证token)
  【这里会显示生成二维码的地址、二维码、密钥明文、应急码】
  Do you want me to update your "/var/www/.google_authenticator" file (y/n) y (确认:更新配置文件)
  ......
  size of 1:30min to about 4min. Do you want to do so (y/n) n (token有效期是1.5min,选y就是4min)
  ......
  Do you want to enable rate-limiting (y/n) y (30s内只允许尝试三次)

  在app里扫二维码,或者手动输入密钥,即可看到token每隔30s更新一次了

  尝试登录
  $ ssh localhost
  verification code: 【输入验证码】
  password: 【输入密码】

补:

但当时只是简单加上了Google Authenticator,实际使用中既要输入验证又要输入密码,太繁琐了,所以在搭建我司跳板机的时候,选择了用 publickey + authenticator 的方案,只需要输入一次验证码即可。但是这里要求很多。如openssh的版本大于6.2,如果不是的话,就无法使用AuthenticationMethods,最好的方式是使用centos7的版本(已验证过可以使用)centos6.5测试无法使用(应该是我技术不行)。

具体的配置方案变化不大,主要是用上了 SSH 6.2+ 新增的 AuthenticationMethods 参数,可以指定一系列验证方法,具体配置如下:

引用
#默认需要先用publickey验证,再用验证码
AuthenticationMethods publickey,keyboard-interactive

#对于指定的IP,只需要publickey验证
Match Address 10.0.0.4
    AuthenticationMethods publickey

#也可以指定用户只需要publickey验证
#Match User XXX
    #AuthenticationMethods publickey

顺便吐槽一下,Linux这套东西折腾起来真是要命,今天配置跳板机备份机的时候,完全相同的配置,复制一份就是不对,虽然配置里只指定了publickey,keyboard-interactive,但是每次输完验证码以后还是要求输入密码才行,折腾了几个小时才发现,不知道从什么时候开始,"auth required pam_google_authenticator.so" 已经不合适了,需要改成 "auth sufficient pam_google_authenticator.so",这样才会在输入验证码以后就结束认证过程(sufficient的实现里加了一个break?什么鬼。)(感谢 @ https://serverfault.com/a/740881/343388

最后,提醒一下使用SecureCRT的同学,你需要在Session Options -> Connection -> SSH2,将Authentication中只选用 "Keyboard Interactive" ,否则没法正常登录。

-------------------------

如果你喜欢这篇文章,可以用支付宝或微信扫码赞赏让我知道

-->

  错误:configure: error: Unable to find the PAM library or the PAM header files

  方法:yum install -y pam-devel

  

引用:https://www.felix021.com/blog/read.php?2133

   https://www.felix021.com/blog/read.php?2172 

堡垒机安装google-authenticator的更多相关文章

  1. jumpserver堡垒机安装

    1. 下载jumpserver cd /opt wget https://github.com/jumpserver/jumpserver/archive/master.zip unzip maste ...

  2. JumpServer堡垒机安装笔记

    厂商文档--一步一步安装CentOS(https://jumpserver.readthedocs.io/zh/master/setup_by_centos.html) 厂商文档--简单优化(http ...

  3. Google Authenticator

    Google Authenticator 现在越来越多的网站采用两步验证,实现方式可能有所区别,一般来说是 1+? (1 即 普通的用户名和密码, ?可能是实物如U盾.手机短信验证码或其他).?的重点 ...

  4. SSH + Google Authenticator 安全加固

    1. SSH连接 Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境.SSH通过在网络中创建安全隧道来实现SSH客户端与服务器 ...

  5. 【Linux】使用Google Authenticator 实现ssh登录双因素认证

    一般来说,使用ssh远程登录服务器,只需要输入账号和密码,显然这种方式不是很安全.为了安全着想,可以使用GoogleAuthenticator(谷歌身份验证器),以便在账号和密码之间再增加一个验证码, ...

  6. Linux下部署SSH登录时的二次身份验证环境记录(利用Google Authenticator)

    一般来说,使用ssh远程登录服务器,只需要输入账号和密码,显然这种方式不是很安全.为了安全着想,可以使用GoogleAuthenticator(谷歌身份验证器),以便在账号和密码之间再增加一个验证码, ...

  7. Google Authenticator(谷歌身份验证器)

    <!DOCTYPE html>Google Authenticator(谷歌身份验证器) ] Google Authenticator(谷歌身份验证器) Google Authentica ...

  8. ssh密码登录+ Google Authenticator 实现双向认证

    通常我们直接通过ssh输入密码连接服务器,但这样很容易出现暴力破解情况,所以我们可以结合google的动态认证+ssh密码,这样能够大大的提升登陆的安全. 简单来说,就是当用户通过ssh登陆系统时,先 ...

  9. 计算机网络安全 —— C# 使用谷歌身份验证器(Google Authenticator)(五)

    一.Google Authenticator 基本概念  Google Authenticator是谷歌推出的一款动态口令工具,旨在解决大家Google账户遭到恶意攻击的问题,在手机端生成动态口令后, ...

随机推荐

  1. 吴裕雄 python 人工智能——基于神经网络算法在智能医疗诊断中的应用探索代码简要展示

    #K-NN分类 import os import sys import time import operator import cx_Oracle import numpy as np import ...

  2. 学习笔记(23)- plato-准备中文语料

    以plato使用的metalwoz数据集的INSURANCE为例,进行语料的汉化过程. 1. 下载数据集 微软的数据集,下载地址:https://www.microsoft.com/en-us/res ...

  3. 使用UUID防止文件重名

    在原文件名的基础上加 UUID.randomUUID().toString()

  4. 【代码学习】PYHTON 元组

    Python的元组与列表类似,不同之处在于元组的元素不能修改.也可进行分片 和 连接操作. 元组使用小括号,列表使用方括号. 一.访问元组 #coding=utf-8 Tuple = ('name', ...

  5. sql 中u.*什么意思

    i.*  i是一个表的别名,i.*是这个表的所有列,比如 select i.* from customer i; 相当于 select id,name,password from customer;

  6. python3下pygame显示中文的设置

    1.先看代码: import pygame from pygame.locals import * def main(): pygame.init() screen = pygame.display. ...

  7. 转专业后补修C语言的一些体会(3)

    1.指针:指针是C语言最为强大的工具之一,有着很多优点,比如可以改善子程序的效率,为动态数据结构提供支持,为C的动态内存分配系统提供支持,为函数提供修改变量值的手段.但指针的使用十分困难.会出现很多意 ...

  8. vs code插件大全

    一.HTML Snippets 超级使用且初级的H5代码片段以及提示 二.HTML CSS Support  让HTML标签上写class智能提示当前项目所支持的样式 三.Debugger for C ...

  9. PS进程及杀掉进程!

    1.程序和进程的关系(1)程序 保存在硬盘.光盘等介质中的可执行代码和数据 静态保存的代码 (2)进程 在 CPU 及内存中运行的程序代码 动态执行的代码 父.子进程:每一个进程可以创建一个或多个进程 ...

  10. Jquery练习1

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...