关于SSH,几乎每个人都同意密钥要优于密码,更安全,并且更先进,但我并不同意这个观点。

虽然密钥的确可以更好,但它有着还没被意识到的严重风险,并且我认为比得到妥善管理的密码更不安全。

通常密钥更好的理由是多数人使用了弱密码,并且系统之间共享密码,所以一旦发生密码泄漏就会同时危害到多个系统。既然密钥可以设置口令,那么同时拥有两者(密钥和口令)的它当然就更安全了。

这的确没错,但是在大多数得到妥善管理的环境中事实上并非如此,他们没明白真正的风险到底源自哪里,来自哪一步。

举个例子,如果我们在每个地方都使用硬性的随机密码,并且不在两个系统、服务,等等之间共享任何密码,在系统搭建的时候就使用工具和流程来这么做,那么由于密码很少变更,系统将会长期安全。一个关键问题是大部分的安全设置应该在第一次安装系统时由某种机制自动完成。

密钥是完全不同的。的确,一个好的系统应该生成好的密钥,并且不共享它,哪怕管理这么多的密钥文件要比管理同样多的密码困难得多地多。密钥很难去移动(特别是要走ssh网关的时候)、存储、命名、组织和共享,等等。这些都是缺点,并且会产生风险。

密钥要做到安全,就需要口令,但是很少密钥有口令,即便有,工程师也常常为了使工作轻松而移除它们,而且每一次使用都可能有机会被移除口令或者被拷贝到其他地方,一旦发生这种事情,安全性就会永久性地降低了。

更严重的是,密钥文件提供访问所需的一切,如果用户没有常识那么就可能被盗,通常是坐不受保护的位置,并以明文的形式从他们的机器上被盗。理论上来说,用户可以为密钥设置口令,但是他们很少这么做,这也是风险的所在 —— 如果我黑进了你的电脑或者ssh网关,那么我就可以在你不知道的情况下登录到你的所有系统,而密码不可能。这正是我反对使用密钥的核心问题 —— 你所有服务器的安全性,其实和你最弱的客户和工程师的机器安全性是一样的,那可能只是台个人笔记本,智能手机,或者家用电脑,并且感染了各种各样的木马和病毒,哪一种都可以读取你的密钥!

好的密码则相反,被保存在类似Keepass的工具里,基本上不可能被盗,特别是大批量的。

解决密钥安全问题的唯一办法是设置口令,但是不太可能,忙到要死的工程师会经常去除口令的。理论上来说ssh协议可以被增强到报告密钥种类和是否使 用了口令,但是因为这是在客户端做的检查,所以服务器无法信任它。不存在一个简单的办法来强制设置口令,因此多数的密钥是不受保护的,并且不安全。

更进一步,对于大型系统,当我们拥有5,000台服务器的时候,哪种方式更加易于管理,是密钥还是密码?当然,LDAP是一种解决方案,但只能用于一些特性系统,而且我们也不可能强制所有客户都使用LDAP,所以我们还是得面对管理密钥还是密码的问题,显然,管理密码要容易得多。我们知道各种类型和用途的密码系统,但很少听说有哪个密钥系统 —— Keepass可以处理密钥文件,进行剪切粘帖,但没有任何实际有用的大规模处理方式。

最后,归结为一个问题,哪一种方式更容易得到正确地管理,是带口令的密钥,还是复杂的随机密码。对我来说,密码赢了。如果您使用了密钥,那么现在请为它加上口令。

除非注明,本站文章均为原创或编译,转载请务必注明出处并保留原文链接: 文章来自IT经理网

SSH应该使用密钥还是密码?的更多相关文章

  1. SSH使用密钥免密码登录

    使用ssh远程连接服务器,有两种身份校验方式:账号密码和秘钥.使用秘钥的方式理论上更加安全,而且免去了输入密码的步骤,使用起来更方便(尤其对于sftp,scp等). 设置 SSH,打开密钥登录功能 编 ...

  2. ssh服务、密钥登陆配置

    环境内核信息: [root@zabbix-01 ~]# uname -a Linux lodboyedu-01 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:2 ...

  3. linux如何配置双机SSH信任然后双向免密码登陆

    linux如何配置双机SSH信任然后双向免密码登陆 www.111cn.net 更新:2015-01-14 编辑:edit02_lz 来源:转载 有时为了方便管理多台Linux主机,想实现双机之间信任 ...

  4. centos使用密钥替换密码登录服务器

    一.首先登陆centos,切换用户,切换到你要免密码登陆的用户,进入到家目录,以下我以admin为例,命令:su admincd ~ 二.创建钥匙,命令:ssh-keygen -t rsa,一路按Y搞 ...

  5. ssh&scp指定密钥

    scp时指定密钥: scp -P22   -r -i ~/.ssh/dongjing-shanghai.pem root@kiri_pro01:/data/backup/back_from_japan ...

  6. 设置SSH自动登陆(免密码,用户名)

    设置SSH自动登陆(免密码,用户名)   1.创建公钥.公钥  ssh-keygen -t rsa  无视它出来的任何提示,欢快的一路回车到底吧.  2.把公钥 id_rsa.pub 复制到远程机器的 ...

  7. db2 mysql oracle 邮件 tomcat ssh telnet ftp samba 账号密码

    db2 mysql oracle 邮件 tomcat ssh telnet ftp samba 账号密码 检测

  8. redhat6.2下的ssh密钥免密码登录(原创)

    这个是我自己写的,鼓励转载,请说明转载地址:http://www.cnblogs.com/nucdy/p/5664840.html 在进行hadoop的免密码的登录操作是,老是发生no route等错 ...

  9. SSH服务搭建、账号密码登录远程Linux虚拟机、基于密钥的安全验证(Windows_Xshell,Linux)

    问题1:如果是两台虚拟机ping不同且其中一个虚拟机是克隆的另一个,需要更改一下MAC地址,关机状态下 一> "编辑虚拟机设置" 一>" 网络适配器" ...

随机推荐

  1. Headfirst设计模式的C++实现——复合模式

    observer.h #ifndef _OBSERVER_H_ #define _OBSERVER_H_ #include <string> class Observer { public ...

  2. Mysql数据库迁移 Ubuntu14.04

    1. 停止数据库服务 sudo service mysql stop 2. 创建数据迁移目标文件夹(实际应该是挂载到新硬盘上) cd /var/lib ls -l drwx------  6 mysq ...

  3. Nodejs微信接口

    代码重要部分都已详细注释,test.js为实例,如果启动url请求,那么程序默认对json格式数据友好,如果有特殊需要,请自行修改返回数据的处理格式 大概功能简介为下: this._token 提供t ...

  4. Jquery ajax basic

    $.ajax({ url: "test.aspx?action=testaction", contentType: "application/json; charset= ...

  5. 使用PHP获取汉字的拼音(全部与首字母)

    <?php /** * 取汉字拼音 * edit by www.jbxue.com */ class GetPingYing { private $pylist = array( 'a'=> ...

  6. asp.net mvc 伪静态路由配置

    asp.net mvc实现伪静态路由必须按如下方式设置好,才能访问 .htm 或者.html页面 C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspne ...

  7. FatMouse

      时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:1431 解决:641 题目描述: FatMouse prepared M pounds of cat food, ready to t ...

  8. js 操作cookie

    jquery.cookie中的操作: jquery.cookie.js是一个基于jquery的插件,点击下载! 创建一个会话cookie: $.cookie(‘cookieName’,'cookieV ...

  9. grunt项目配置

    安装完CLI,还要在项目安装Grunt npm install -g grunt-cli npm install grunt --save-dev 源码放在src下 package.json放在根目录 ...

  10. Java - 选择性排序 PHP || Java 代码对比

    int [] array1 = {1,3,5,7,9,10,2,15,154,10,2,188,200};//定义一个数组,内容为混乱大小 int index = 0;//定义一个最大值或最小值的位置 ...