SSH协议和设置公钥免密登录

参考链接:https://zhuanlan.zhihu.com/p/665264294 作者:网络工程师俱乐部

1.什么是SSH?

   SSH,即Secure Shell,安全外壳

  SSH是一种网络通信协议,用于计算机之间的加密登录

  最早的时候,互联网通信都是明文通信,非常容易截获,基本属于白给(QQ早期经常有明文通信)。

  1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。

2.SSH登录原理

 

3.SSH基本用法

  语法:

  ssh -p 22 user@host

  参数:

  -p:指定端口号。

  user:登录的用户名。

  host:登录的主机。

 

  默认的端口号为22,当端口号为22的时候,可以省略,直接使用如下方式:

  ssh user@host

  此外,如果本地正在使用的用户名与远程登录的用户名一致,登录用户名也是可以省略的,即如下:

  ssh host

4.SSH远程登录实例

现在我有两台linux虚拟机,上面安装都是centOS6.5,ip分别为192.168.13.135和192.168.13.138,如下图:

 

 

现在,我需要操作的是通过SSH在192.168.13.138上面,登录到192.168.13.135上面。

首先,我们可以使用如下命令,查看两台机器是否启用了ssh。

netstat -ntlp |grep ssh

使用如下命令进行连接。

ssh -p 22 root@192.168.13.135

若在本机上是首次登录该远程主机,则会出现如下界面。

 

大致意思就是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?

输入yes即可。

 然后输入密码,即可连接ok了。

 

 要想退出,直接输入exit即可。

 

 

5.公钥免密登录

  一、公钥加密 

  假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。
我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用
数字2,就是我的私钥,来解密。这样我就可以保护数据了。
  我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但是别人解不开,因为别人不知道2就是我的私钥,
只有我才能解密,解密后就得到a。这样,我们就可以传送加密的数据了。
 
  二、私钥签名
  如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2是我的私钥),结果所有的人都看到我的内容了,因为他们都知
道我的公钥是1,那么这种加密有什么用处呢?
  但是我的好朋友x说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥2,加密,加密后的内容是d,发给x,再告诉他
解密看是不是c。他用我的公钥1解密,发现果然是c。
这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。
这样我们就能确认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是数字签名。
 
总结:公钥和私钥是成对的,它们互相解密。
  公钥加密,私钥解密。
  私钥数字签名,公钥验证。
 
  这些密码学的概念容易被搞混淆,的确也情有可原。因为公钥、私钥、加密、认证这些都是较为复杂的问题,其概念不太容易理解,理解不透就容易产生各种似是而非的概念,为了让大家对于密码学有进一步的了解,这里我就详细解说一下公钥和私钥的具体作用和使用方法。
  加密和认证
  首先我们需要区分加密和认证这两个基本概念。
  加密是将数据资料加密,使得非法用户即使取得加密过的资料,也无法获取正确的资料内容,所以数据加密可以保护数据,防止监听攻击。其重点在于数据的安全性。身份认证是用来判断某个身份的真实性,确认身份后,系统才可以依不同的身份给予不同的权限。其重点在于用户的真实性。两者的侧重点是不同的。
  公钥和私钥
  其次我们还要了解公钥和私钥的概念和作用。
  在现代密码体制中加密和解密是采用不同的密钥(公开密钥),也就是非对称密钥密码系统,每个通信方均需要两个密钥,即公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。
  公钥私钥的原则:
  1. 一个公钥对应一个私钥。
  2. 密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。
  3. 如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。
  4. 如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密。
  非对称密钥密码的主要应用就是公钥加密和公钥认证,而公钥加密的过程和公钥认证的过程是不一样的,下面我就详细讲解一下两者的区别。
  基于公开密钥的加密过程
  比如有两个用户Alice和Bob,Alice想把一段明文通过双钥加密的技术发送给Bob,Bob有一对公钥和私钥,那么加密解密的过程如下:
  1. Bob将他的公开密钥传送给Alice。
  2. Alice用Bob的公开密钥加密她的消息,然后传送给Bob。
  3. Bob用他的私人密钥解密Alice的消息。
  上面的过程可以用下图表示,Alice使用Bob的公钥进行加密,Bob用自己的私钥进行解密。

基于公开密钥的认证过程

  身份认证和加密就不同了,主要用户鉴别用户的真伪。这里我们只要能够鉴别一个用户的私钥是正确的,就可以鉴别这个用户的真伪。
  还是Alice和Bob这两个用户,Alice想让Bob知道自己是真实的Alice,而不是假冒的,因此Alice只要使用自己的私钥对文件签名发送给Bob,Bob使用Alice的公钥对文件进行解密,如果可以解密成功,则证明Alice的私钥是正确的,因而就完成了对Alice的身份鉴别。整个身份认证的过程如下:
  1. Alice用她的私人密钥对文件加密,从而对文件签名。
  2. Alice将签名的文件传送给Bob。
  3. Bob用Alice的公钥解密文件,从而验证签名。
  上面的过程可以用下图表示,Alice使用自己的私钥加密,Bob用Alice的公钥进行解密。

 自己的理解:公钥加密,私钥解密,公钥私钥都在服务端,用于客户端向服务器发送信息的信息加密,其他人可以拿到公钥,但是解析不了公钥加密后的明文。具体过程:1.客户端向服务端发送请求 2.服务端响应向客户端发送公钥 3.客户端通过公钥把需要发送的信息进行加密,将加密后的信息发送给服务端 4.服务端通过私钥把加密信息解密,解析出客户端想要发送的信息原文。 tips:存在漏洞,中间人攻击,截取客户端请求1,假冒服务端,完成后续流程。

      私钥加密(准备说是私钥签名),公钥私钥都由客户端生成,需要将公钥存于服务端,用于身份认证(对暗号)。具体过程:1.客户端生成一对公钥私钥,将公钥保存到服务端2.客户端向服务端发送请求 3.服务端向客户端发送一串字符串(无实际意义)4.客户端将字符串通过私钥进行签名(加密),将加密后的字符串发给服务端5.服务端收到字符串后通过自己的公钥进行解密。解密后的文本和2步种服务端发送的字符串进行比对,比对成功即认证成功。

 6.免密登录实操步骤(putty实现)

  参考博客:https://blog.csdn.net/qq_39876685/article/details/131050415  作者:踢挨星球

  坑:puttygen直接生成的公钥格式是这样的:

但是使用公钥导出的格式是这样的:

去掉注释都和上面不一样,刚开始用了下面的公钥导致server refused our key

先后排查了配置文件权限,修改日志级别,查看日志,查看防火墙,最后查看公钥配置才发现格式问题!

chmod 644 ~/.ssh/authorized_keys 
tail -f /var/log/auth.log
vi /etc/ssh/sshd_config
sentenforce0
sysytemctl status firewalld

 

 

  

 

posted @   小皮睡不醒  阅读(376)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示