SSH应该使用密钥还是密码?
关于SSH,几乎每个人都同意密钥要优于密码,更安全,并且更先进,但我并不同意这个观点。
虽然密钥的确可以更好,但它有着还没被意识到的严重风险,并且我认为比得到妥善管理的密码更不安全。
通常密钥更好的理由是多数人使用了弱密码,并且系统之间共享密码,所以一旦发生密码泄漏就会同时危害到多个系统。既然密钥可以设置口令,那么同时拥有两者(密钥和口令)的它当然就更安全了。
这的确没错,但是在大多数得到妥善管理的环境中事实上并非如此,他们没明白真正的风险到底源自哪里,来自哪一步。
举个例子,如果我们在每个地方都使用硬性的随机密码,并且不在两个系统、服务,等等之间共享任何密码,在系统搭建的时候就使用工具和流程来这么做,那么由于密码很少变更,系统将会长期安全。一个关键问题是大部分的安全设置应该在第一次安装系统时由某种机制自动完成。
密钥是完全不同的。的确,一个好的系统应该生成好的密钥,并且不共享它,哪怕管理这么多的密钥文件要比管理同样多的密码困难得多地多。密钥很难去移动(特别是要走ssh网关的时候)、存储、命名、组织和共享,等等。这些都是缺点,并且会产生风险。
密钥要做到安全,就需要口令,但是很少密钥有口令,即便有,工程师也常常为了使工作轻松而移除它们,而且每一次使用都可能有机会被移除口令或者被拷贝到其他地方,一旦发生这种事情,安全性就会永久性地降低了。
更严重的是,密钥文件提供访问所需的一切,如果用户没有常识那么就可能被盗,通常是坐不受保护的位置,并以明文的形式从他们的机器上被盗。理论上来说,用户可以为密钥设置口令,但是他们很少这么做,这也是风险的所在 —— 如果我黑进了你的电脑或者ssh网关,那么我就可以在你不知道的情况下登录到你的所有系统,而密码不可能。这正是我反对使用密钥的核心问题 —— 你所有服务器的安全性,其实和你最弱的客户和工程师的机器安全性是一样的,那可能只是台个人笔记本,智能手机,或者家用电脑,并且感染了各种各样的木马和病毒,哪一种都可以读取你的密钥!
好的密码则相反,被保存在类似Keepass的工具里,基本上不可能被盗,特别是大批量的。
解决密钥安全问题的唯一办法是设置口令,但是不太可能,忙到要死的工程师会经常去除口令的。理论上来说ssh协议可以被增强到报告密钥种类和是否使 用了口令,但是因为这是在客户端做的检查,所以服务器无法信任它。不存在一个简单的办法来强制设置口令,因此多数的密钥是不受保护的,并且不安全。
更进一步,对于大型系统,当我们拥有5,000台服务器的时候,哪种方式更加易于管理,是密钥还是密码?当然,LDAP是一种解决方案,但只能用于一些特性系统,而且我们也不可能强制所有客户都使用LDAP,所以我们还是得面对管理密钥还是密码的问题,显然,管理密码要容易得多。我们知道各种类型和用途的密码系统,但很少听说有哪个密钥系统 —— Keepass可以处理密钥文件,进行剪切粘帖,但没有任何实际有用的大规模处理方式。
最后,归结为一个问题,哪一种方式更容易得到正确地管理,是带口令的密钥,还是复杂的随机密码。对我来说,密码赢了。如果您使用了密钥,那么现在请为它加上口令。
SSH应该使用密钥还是密码?的更多相关文章
- SSH使用密钥免密码登录
使用ssh远程连接服务器,有两种身份校验方式:账号密码和秘钥.使用秘钥的方式理论上更加安全,而且免去了输入密码的步骤,使用起来更方便(尤其对于sftp,scp等). 设置 SSH,打开密钥登录功能 编 ...
- ssh服务、密钥登陆配置
环境内核信息: [root@zabbix-01 ~]# uname -a Linux lodboyedu-01 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:2 ...
- linux如何配置双机SSH信任然后双向免密码登陆
linux如何配置双机SSH信任然后双向免密码登陆 www.111cn.net 更新:2015-01-14 编辑:edit02_lz 来源:转载 有时为了方便管理多台Linux主机,想实现双机之间信任 ...
- centos使用密钥替换密码登录服务器
一.首先登陆centos,切换用户,切换到你要免密码登陆的用户,进入到家目录,以下我以admin为例,命令:su admincd ~ 二.创建钥匙,命令:ssh-keygen -t rsa,一路按Y搞 ...
- ssh&scp指定密钥
scp时指定密钥: scp -P22 -r -i ~/.ssh/dongjing-shanghai.pem root@kiri_pro01:/data/backup/back_from_japan ...
- 设置SSH自动登陆(免密码,用户名)
设置SSH自动登陆(免密码,用户名) 1.创建公钥.公钥 ssh-keygen -t rsa 无视它出来的任何提示,欢快的一路回车到底吧. 2.把公钥 id_rsa.pub 复制到远程机器的 ...
- db2 mysql oracle 邮件 tomcat ssh telnet ftp samba 账号密码
db2 mysql oracle 邮件 tomcat ssh telnet ftp samba 账号密码 检测
- redhat6.2下的ssh密钥免密码登录(原创)
这个是我自己写的,鼓励转载,请说明转载地址:http://www.cnblogs.com/nucdy/p/5664840.html 在进行hadoop的免密码的登录操作是,老是发生no route等错 ...
- SSH服务搭建、账号密码登录远程Linux虚拟机、基于密钥的安全验证(Windows_Xshell,Linux)
问题1:如果是两台虚拟机ping不同且其中一个虚拟机是克隆的另一个,需要更改一下MAC地址,关机状态下 一> "编辑虚拟机设置" 一>" 网络适配器" ...
随机推荐
- Nodejs微信接口
代码重要部分都已详细注释,test.js为实例,如果启动url请求,那么程序默认对json格式数据友好,如果有特殊需要,请自行修改返回数据的处理格式 大概功能简介为下: this._token 提供t ...
- 【C#】数据库备份及还原的实现代码【转载】
[转载]http://www.codesky.net/article/200908/128600.html C#数据库备份及还原1.在用户的配置时,我们需要列出当前局域网内所有的数据库服务器,并且要列 ...
- Mac下使用Web服务器性能/压力测试工具webbench、ab、siege
Web开发,少不了的就是压力测试,它是评估一个产品是否合格上线的基本标准,下面我们来一一剖析他们的使用方式. 测试前,前面先把系统的端口限制数改大,看看Mac下面的默认限制 ulimit -a ope ...
- 为云饰数据库添加Index
Asset Collection: 1. _id_ 2. CategoryId_1_Date_-1 3. CategoryId_1_Id_1 4. CategoryId_1_Name_1 5. Cat ...
- Linux定时任务crontab每三秒执行一次shell
第一种方法:当然首先想到的是写一个触发的脚本,在触发脚本中使用死循环来解决此问题,如下: cat kick.sh #!/bin/bash while : ;do /home/somedir/scrip ...
- JAVA对象是如何占用内存的
本文使用的是32位的JVM ,jdk1.6.本文基本是翻译的,加上了一些自己的理解,原文见文章底下链接. 在本文中,我们讨论如何计算或者估计一个JAVA对象占多少内存空间.(注意,使用 C ...
- WPF 多线程处理(2)
WPF 多线程处理(1) WPF 多线程处理(2) WPF 多线程处理(3) WPF 多线程处理(4) WPF 多线程处理(5) WPF 多线程处理(6) WPF UI 设计需要自动适应窗体大小,那么 ...
- 【转】perl中尖括号运算符(<>)使用说明
perl中尖括号运算符的用途分享,这里简单介绍下,方便需要的朋友 perl中<>运算符可以有如下的用途: 1)如果尖括号中间是文件句柄,尖括号运算符允许你读取文件句柄,比如<STDI ...
- ORA-19809: 超出了恢复文件数的限制
实验环境:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod 实验背景:向tough.t中插入40万条记录,然后rollb ...
- 3DSoftRenderer
研究了好几天基本的图形学,对于光栅化的大致过程有点了解了,很感谢网上的很多大牛的无私奉献,我就写一下这几天的总结,希望也能对网络上的知识做出一点点点的贡献. 屏幕有什么特点,无非是一排排的像素点,每个 ...