如果饿了就吃,困了就睡,渴了就喝,人生就太无趣了
1 ssh密码登录
ssh使用的非对称加密,非对称加密中有两个密钥:公钥和私钥。公钥由私钥产生,但却无法推算出私钥;公钥加密后的密文,只能通过对应的私钥来解密。
ssh密码登录流程:
-
服务器A
给
服务器B
送登录请求 -
服务器B
接收到请求后将公钥发送给
服务器A
-
服务器A
使用
服务器B
的公钥对登录密码进行加密生成密文 -
服务器A
将密文发送给
服务器B
-
服务器B
使用私钥将密文解密,获得
服务器A
输入的密码 -
服务器B
校验密码是否合法(此为本机work密码) -
服务器B
返回登录结果给
服务器A
:成功登录或密码错误
2 中间人攻击
在非对称加密中可以有效保护登录密码不被泄漏,但这是在建立连接到真实服务器的情况下。设想一下,如果拦截者并不监听密码或公钥,而是直接伪装成服务器呢:
拦截者
在获取了服务器B的密码,就可以攻击
服务器B
了,ssh为了解决这个问题,将问题抛给了用户,如图
第一次连接一个陌生服务器,会询问发起者是否相信这个主机,发起者输入yes后,将该服务器加到known_hosts文件中,下次连接不在确认。
3 ssh免密登录
如果每次ssh都需要输入密码,非常麻烦,ssh又提供了一个免密方式,公钥登录。
-
服务器A
将公钥发送给
服务器B
-
服务器B
将
服务器A
的公钥写入
authorized_keys
文件中 -
服务器A
发起登陆请求,并将自己的公钥一起发送 -
服务器B
将接收到的公钥和
authorized_keys
进行比对。 -
如果有相同的公钥,生成一个随机数
R
,使用
服务器A
的公钥对随机数
R
进行加密,生成
pubKey(R)
-
服务器B
将
pubKey(R)
发送给
服务器A
-
服务器A
使用私钥 对
pubKey(R)
进行解密,得到随机数
R
-
服务器A
将
R
和
SessionKey
(每个会话的唯一密钥)使用
MD5
进行加密,生成
Digest1
-
服务器A
将
Digest1
发送给
服务器B
-
服务器B
同样把随机数
R
和
SessionKey
使用
MD5
进行加密,生成
Digest2
-
服务器B
比较
Digest1
和
Digest2
是否相同,相同则登录成功。
4 具体操作
4.1 服务器A生成密钥对
执行下面的命令,一路回车即可
ssh-keygen
4.2 将公钥写入authorized_keys文件
cd ~/.ssh
touch authorized_keys
cat id_rsa.pub >> authorized_keys
4.3 将authorized_keys发送给服务器B
scp authorized_keys root@you_ip
4.4 验证免密登录
在服务器A ssh连接服务器B,如图
参考博客
https://www.cnblogs.com/276815076/p/10449354.html
https://www.cnblogs.com/shireenlee4testing/p/10366061.html
版权声明:本文为weixin_41938180原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。