让Linux登陆支持SSH Key和Password两级验证的方法

发布时间:2020-06-01编辑:脚本学堂
让Linux登陆支持SSH Key和Password两级验证的方法
    让linux登陆支持SSH Key和Password两级验证的方法,感兴趣的朋友可以参考下。

    首先声明,这里的Password并非是指生成的SSH Key上的那个密码,那个应该叫Passphrase,即密码短语,是绑定在SSH Key上的一层密码,和服务器的Password是没有关系的,Passphrase的创建,修改和删除都只需用户在客户端软件上完成就可以了。

    今天,收到了一封上级发来的邮件,希望把服务器登陆从现在的SSH Key验证方式提升为SSH Key和Password两级验证方式,也就是说,一般情况下,我们设置的Password和SSH Key是“或”关系,现在需要设置为“与”关系。之前为了提升服务器的安全性,我们禁用了所有服务器的Password验证,让服务器仅支持SSH Key。
    具体方法可以参考这篇文章:http://www.jb200.com/LINUXjishu/2692.html

    但现在接到了这样的要求,上级的考虑肯定是出于管理的角度,而我们就需要验证该方案的可行性,如果不行的话,可以通过哪些其它的方式来实现其目的。
    经过了一阵Google之后,我所找到的资料全是免密码登陆的,这就是我们目前的方式。
    有一些朋友说,你们都在密钥上加上密码短语不就达到目的了?但是,在管理上,我们很难要求所有的人都给他们的密钥加上密码短语,而且即使他们加上了,其复杂度也是难以控制的。

    我还尝试了在pam.d/sshd中进行一些设置,但都未能实现,最终我发现了一篇文章:
    http://serverfault.com/questions/161699/how-can-i-increase-ssh-security-can-i-require-both-a-key-and-password

作者与我有着类似的需求,并且有人也给出了答案:
1. OpenSSH Server是不支持SSH Key和Password两级验证的,也就是说,只能存在 “或” 的关系,不能存在 “与” 的关系;
2. 采用其他的SSH Server,例如Tectia SSH server,是可以实现的,只需要添加参数“RequiredAuthentications publickey, password”就可以了;

建议:
1.即使其他的SSH Server如Tectia SSH Server支持这样的功能,我们也不能用其替换OpenSSH Server,原因很简单,OpenSSH Server作为Linux与众多Unix的默认SSH Server,其安全性是有保障的,我们想采用两级验证的目的是为了提供更好的安全性,采用其他的SSH Server,很可能存在各种安全上的漏洞隐患;

2.我们想采用两级验证,并非一定要从SSH Server本身去实现,上级所要求的只是管理上达到的一种效果,我们完全可以通过将服务器设置为只允许部分白名单IP地址登陆,然后将办公室的IP和几台VPN服务器的地址加入,这样每次大家都需要先通过VPN的一道密码或证书验证,才能再登陆服务器,上级的要求也就满足了。