SSH登录方式主要分为两种:
当前文档转载自博客园-->原文地址
1. 用户名密码验证方式
image说明:
(1) 当客户端发起ssh请求,服务器会把自己的公钥发送给用户;
(2) 用户会根据服务器发来的公钥对密码进行加密;
(3) 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功。
2. 基于密钥的登录方式
image说明:
-
首先在客户端生成一对密钥(ssh-keygen);
-
并将客户端的公钥ssh-copy-id 拷贝到服务端;
-
当客户端再次发送一个连接请求,包括ip、用户名;
-
服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:qwer;
-
服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端;
-
得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端;
-
服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录。
总结:
1,文章是复制过来的,其正确性,有待考证!
2, 第一SSH认证方式(服务端保留私钥,客户端获得服务端下发的公钥):
由于是服务端发放公钥,客户端使用此公钥进行明文加密。客户端的公钥就容易被第三方(坏人)进行冒充发放。所以,按照上面所述,及其不安全
!俺个人严重怀疑第一种方案的可行性!个人猜测,可能第一种方案还掺杂有对称秘钥交换等详细流程.....而图中并没有描述出来。(如果掺杂对称加密,就和tm的SSL
差不多啦!)
3, 第二SSH认证方式(服务端获得客户端上传的公钥,客户端保留私钥):
这种方式之所以可以用来免密码登录的原因如下:
-
由于密钥对是由客户端生成的。因此,私钥安全性完全由客户端用户自行负责(万一私钥泄露,客户端用户自己背锅,怨不得别人!)
-
Client端向Server端上传个人公钥后
(在这个过程中,公钥完全有可能被其他人获得。不过那都没有关系的,既然取名叫做公钥,那就是公开的!本身就不存在泄露的问题)
,server端将会维护一个公钥列表(为什么是维护一个公钥列表呢?因为客户端有多个嘛,如果千千万万的客户端都以这种方式进行认证的话,可不就产生了一个公钥列表集合?)
-
如上所述,当 Client端向服务端列表发起认证请求后,Server端根据请求信息
(包含Client端一系列信息)
从公钥列表
中找到当前请求相关的公钥(其实就是第2步上传的那个公钥)
。然后服务端用公钥加密一段字符串如:“hellow world”。并将密文返回给客户端...然后客户端先对密文进行解密,再将解密后的明文用私钥加密并发送给Server端。再然后,服务端用公钥对密文进行解密。若解密后的明文还是“hellow world”。就说明:当前跟我进行连接请求的龟儿子有正确的私钥啊!!
。然后,Server端就认为客户端身份认证成功!而这个认证结果同时也说明了一个问题:Server端只要保证你有对应的私钥,就认为你就是那个他要找的人。然后就对你开启了相应的操作权限。一旦私钥泄露...那么任何人都可以冒充你了....。因此,客户要尽量保存好自己的私钥,不要泄露。
4,那么,如果客户端的公钥泄露会引发什么问题呢?
黑客通过各种手段轻松获取到了你的公钥,此时如果黑客在你的上级网络节点进行请求拦截,然后模仿服务端返回给你一段密文......最终你就被黑客欺骗了,虽然你的请求IP仍然是对的。但是你根本防不住上级网络节点动手脚啊!于是,您就以为自己和服务端认证成功了呢。于是你进行私密图片上传的请求,就到达黑客这里...结果:黑客获取私密图片。而黑客由于没有你的私钥...就不能跟Server端进行认证行为(如果黑客从数据链路层进行代理的话,就可以冒充Client端了,不过难度系数极大。)
。
因此,第二种认证方式只能用来防止有人冒充Client端。而不能防止
有人冒充Server端。
由于Server端有可能是冒充的,所以在发送连接请求时一般会有如类似下提示:
The authenticity of host 'xxx.xx.xxx.xxx(xxx.xx.xxx.xxx)' can't be established
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:.
Are you sure you want to continue connecting(yes/no)?
有童鞋就问了:
Server端都tm被代理了,我要SSH这鸟协议有什么用?
首先,由于黑客只拿到了某一个Client端A
的公钥。所以,黑客只能对Client端A
进行Server端冒充。由于黑客没有Client端B,C,D.....的公钥
。Client端B,C,D....
则不会被黑客进行Server端冒充。所以说啊,黑客费了老半天的劲儿,也只能破解某一个用户的私密报文,而不能破解所有人的报文。由于付出和收入完全不成对等
......因此,黑客才不会花费那么多时间和你耍这个赔本赚吆喝的买卖!!除非,您是总统级的人物.....下达了发动第三次世界大战的命令。才值得黑客这么干......
那么,有没有可能黑客获得了所有Client端保存在Server端的公钥列表呢?
答:只有一种可能性------>监守自盗!
例如:维护服务端的某个成员!将客户端的公钥列表打包发给了黑客,以获取某些能够满足自己利益的玩意儿(比如金钱,权利,法西斯理想等)
!
而实际上,针对'类似公钥列表'
这种信息。开发人员在设计Server端时肯定是有所考虑的。绝对不会以明文的方式进行存储,想要监守自盗也不是那么容易哒!当然,如果某人对这方面非常精通...监守自盗也是有可能发生的。不过,其所获得的风险也是相当大的......随时有可能被发放监狱专属小衬衫,然后下班辈子就在度过吧(一个精通信息安全的人被放在监狱里,终生不能耍电脑,真的是求生不能求死不得了!)
。当然,监守自盗的带来的损失有多大呢?
其实也没多大....我们之前已经说了:从哲学的角度上讲,公钥就是公开的秘钥,万一泄露了。Server端只需通知大家赶快替换自己保存在服务端上的公钥即可!So,黑客能够利用已泄露的Client端公钥列表
做的坏事也非常有限!于是就又成了一件赔本赚吆喝的买卖!
网络上没有不可破解的加密协议,家庭也没有绝对安全的防盗门,小区也不会有绝对安全的门卫,更高的安全等级就意味着更高的社会资源消耗!我们只需要做到让坏人付出的代价远高于其所得即可。
_______ 沃仔基硕德
网友评论