1.实现免密登录
要实现免密登录,首先要让一台主机直到另一台主机的公钥,然后要先生成公钥,用以下命令操作:
[root@rhcsa .ssh]# ssh-keygen -t rsa // 产生公私钥 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): // 保存在哪个文件中,默认root Enter passphrase (empty for no passphrase): // 输入密码,可以为空 Enter same passphrase again: 再次输入密码,与上述同步; Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:IMIXWKnZK Cugc5h4ya/J1sHYAlrxKVTK1kQenjn8UQ root@rhcsa The key's randomart image is: ---[RSA 2048]---- |o *o.E | ///这张图就是rsa一对公私钥的结果 |o**.oo | | *O== o | |o =*.= . | |.. o.. S | |... .. | | .. . | |* ... | |== = | ----[SHA256]----- // 使用哈希算法 [root@rhcsa .ssh]# ls // 再次查看已经生成了rsa公钥和私钥(.pub) authorized_keys id_rsa.pub id_rsa known_hosts [root@rhcsa .ssh]#
(
[root@rhcsa .ssh]# ssh-copy-id root@192.168.188.129 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@192.168.188.129's password:
Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.188.129'" and check to make sure that only the key(s) you wanted were added. [root@rhcsa .ssh]#
(3)检查另一台主机是否收到公钥信息:

#:通过比较,可以发现公钥完全相同,因此129主机获得的公钥是正确的,为130生成的公钥,因此下次登录可以实现无秘密登录:结果如下:
[root@rhcsa .ssh]# ssh root@192.168.188.129 Last login: Sun Jul 24 05:42:19 2022 from 192.168.188.1 [root@rhcsa3 ~]#
# :但这仅限于130主机可以登录129主机,因为130主机产生的公钥已经传输到129主机,所以登录129主机通过密钥认证可以成功登录,不需要密码,另一主机无密码登录结果如下:以同样的方式实现另一主机的公钥配置;
[root@rhcsa .ssh]# ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/root/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_dsa. Your public key has been saved in /root/.ssh/id_dsa.pub. The key fingerprint is: SHA256:C9oEX3glhZ5b/xZEe89i/TXhabQtM6G/uKbSUrw6QkU root@rhcsa The key's randomart image is: ---[DSA 1024]---- | .oo | | .Eo . | | . .oo. . . | | o o . o.| | .S . oo=*| | ...o o B**| | ... .o . .* | | . o .. .| | ..=.ooo.. | ----[SHA256]----- [root@rhcsa .ssh]# ls authorized_keys id_dsa id_dsa.pub identity identity.pub known_hosts [root@rhcsa .ssh]# cat id_dsa.pub ssh-dss AAAAB3NzaC1kc3MAAACBAP/kmaODs2Ih2rDHv2CJbB5Z5 81LjbDRAnZg7TP1p8VlxBGI lQnjYVdkdfhMm4LFE2BApv9gpDTyN1BcvJva3ByDdLbhU8SHVmVYXLT8hr91QF0IcrcR1RmVlXUxnW5EBFbqIPk AYA4wCvlsbf/iDjAxlk8c7jLjhldJ4dq2lAAAAFQDrzRUXIZGTX7Zd mb6shWaY4MX4wAAAIEArscsoSC6driG8pWkMLFB/cw93wwO2beUTLt9VozGi3e6x2t7JVu 2AxAhyK1x7OQkqltui2pyzPU9MJqJq3uNa/RhZrhIq8euTZ tGJuw38 kKkz5OcJcv7YEm1EU6obAlz26iFNUScTZOCJcG5LP4rJXCKSQBKIgr6v oQVH7cAAACAIR8tIP87uBIi4lkDS/CzW7s6HplBy2H7wCTX/YdD9BJjwWj6 RHzmotgmUM/EaCZkiGfneo/hfECFMzsKWFekxwcqO4Brcuk nOIp6TixehsSnb/uG3FgjuIRncGczBcvD6C7vGS1jHcfSzsDJLn6zZXK6Uga0kP4lQm4YV6c M= root@rhcsa [root@rhcsa .ssh]# ssh root@192.168.188.130 root@192.168.188.130's password: [root@rhcsa .ssh]# ssh-copy-id root@192.168.188.130 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_dsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@192.168.188.130's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.188.130'" and check to make sure that only the key(s) you wanted were added. [root@rhcsa .ssh]# ssh root@192.168.188.130 Last login: Sun Jul 24 18:20:01 2022 from 192.168.188.130 [root@rhcsa ~]#
2.设置只允许student1, student2用户登录
(1)首先要创建这两个用户:
[root@rhcsa ~]# useradd student1 [root@rhcsa ~]# useradd student2 [root@rhca ~]# tail -2 /etc/passwd
student1:x:1008:1012::/home/student1:/bin/bash
student2:x:1009:1013::/home/student2:/bin/bash
[root@rhcsa ~]#
(2)在配置文件中进行设置:
[root@rhcsa ~]# cd /etc/ssh/
[root@rhcsa ssh]# vim sshd_config
#:需要在/etc/ssh/sshd_config文件中进行用户的设置,由于没有预先定义这个设置,所以需要手动进行添加;配置如下:在配置文件的最后一行进行添加
AllowUsers student1 student2
#:配置完成之后需要重启服务:
[root@rhcsa ssh]# systemctl restart sshd
#:设置了只有student1和student2可以登录所以,用户stu1无法登录到130主机;
[root@rhcsa ssh]# su - stu1
Last login: Sun Jul 24 19:13:49 CST 2022 on pts/1
[stu1@rhcsa ~]$ ssh root@192.168.188.130
root@192.168.188.130's password:
Permission denied, please try again.
root@192.168.188.130's password:
但是用student1和student2可以正常进行登录:
[root@rhcsa ssh]# su student1
[student1@rhcsa ssh]$ ssh root@192.168.188.129
The authenticity of host '192.168.188.129 (192.168.188.129)' can't be established.
ECDSA key fingerprint is SHA256:8c2C5tMnWBsSOue/XYgoOE4iJO4qfvaCZNorqEkJlU4.
ECDSA key fingerprint is MD5:22:50:e5:dc:8e:17:59:04:4c:43:98:d9:ab:58:f1:3e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.188.129' (ECDSA) to the list of known hosts.
root@192.168.188.129's password:
Last login: Sun Jul 24 08:02:42 2022 from 192.168.188.130
[root@rhcsa3 ~]#
[root@rhcsa ssh]# su student2
[student2@rhcsa ssh]$ ssh root@192.168.188.129
root@192.168.188.129's password:
Last login: Sun Jul 24 08:03:21 2022 from 192.168.188.130
[root@rhcsa3 ~]#
图示讲解两台主机或者服务器与客户机之间的认证加密过程:
加密算法还有两个数字:一个叫p:模数,一个叫g:基数;Alice和Bob都会产生自己的私钥,然后利用私钥通过数字计算得出自己的公钥,计算过程以及公司如下图所示:
Alice和Bob通过上述公式产生自己的公钥,此时Alice和Bob都有自己的公钥和私钥,但是彼此还不知道,只有自己知道,然后Alice和Bob将自己的公钥发送给对方,接下来通过算法产生会话秘钥,即上图中的K,这一阶段没有数据的传输,如果KA==KB,那么就说明拿到的就是彼此的秘钥,后面在进行数据的传输时,使用KA或者KB将数据进行加密,对方接收到后,使用产生的会话秘钥进行解密,即可得到数据;
# :在建立连接时,非对称加密比较安全;
#:再进行传输时,对称加密效率更快;
3.get 和 post,以及常用的put,delete;
#:首先需要知道的一个概念是:URL + URN = URI
GET方法的用途:发送一个请求来获取服务器资源;
POST方法的用途:向URL指定的资源提交数据或附加新的数据;
PUT方法的用途:与post方法很像,也是向服务器提交数据进行处理请求,但是,它们之间有不同,PUT指定了资源在服务器上的位置,而POST没有,一般用于修改资源;
DELETE方法的用途:请求服务器删除指定的资源;
1.功能不同:
post是向服务器发送数据;
get是向服务器获取数据;
2.过程不同:
get在浏览器回退时是无害的,但是post会再次提交请求;
get请求会被浏览器主动缓存,但是post不会,除非手动设置;
get请求只能进行URL编码,但是post支持多种编码方式;
get请求的参数会保存在浏览器的历史记录中。 get请求在URL中传送的参数是有长度限制的,但是post没有; getKpost更加不安全,因为传送的参数直接暴露在URL上,所以不能传敏感信息。
get参数通过URL传送,但是post是放在request body里面的。
3、获取值的方式不同 get方法,服务端使用的是request. queryString(); post法,服务端使用的是request.form()获取提交的数据。
4、底层记忆方法: http协议中两种发送请求的方法;HTTP是基于TCPIP协议关于数据在万维网中如何通信的协议。 在万维网中,TCP是一辆运输数据的车子,但是需要分清每辆车是做什么用的,这样才能够让运输数据有目的性,并且有秩序,所以呢,Http就发挥作用,给每个车子明确标好是坐什么服务: get、 post、delete、put等。要使用GET服务时候,就给车一个标签贴着GET,然后将信息放在车顶的URL中,但是车顶的东西不能无限制的放;而post方法是将要传动的数据放在车厢内,这样敏感信息就更加安全,并且车厢很大,没有限制噻多少数据。所以说get方法和post方法就是TCP连接。并且get会产生一个TCP数据包,r而post会产生两个TCP数据包。 对于get方法: HTTP会把header和dala一起发送出去;服务器响应回来200;对于post方法,HTTP会先发送header,服务器响应100;再发送data,服务器响应200。并且研究表明:在网络较好的环境下,我们发送一次数据包和发送两次数据包的时间大致相同,但是网络不好的情况下,两次TCP包对于校验数据的完整性有很大的作用;并且并不是所有的浏览器在处理这个post请求的时候都会进行两次的发包,火狐浏览器就不是。
4.HTTP状态码,常用的状态码有哪些?
(1)1开头的状态码:信息类;
100,接受的请求正在处理,信息类状态码;
(2)2开头的状态码:成功;
2xx(成功)表示成功处理了请求的状态码 200(成功)服务器已成功处理了请求。
(3)3开头的状态码:重定向;
3xx(重定向)表示要完成请求,需要进一步操作。通常这些状态代码用来重定向。 301,永久性重定向,表示资源已被分配了新的 URL 302,临时性重定向,表示资源临时被分配了新的 URL 303,表示资源存在另一个URL,用GET方法获取资源 304,(未修改)自从上次请求后,请求网页未修改过。服务器返回此响应时,不会返回网页内容
(4)4开头的状态码:客户端错误;
4xx(请求错误)这些状态码表示请求可能出错,妨碍了服务器的处理 400(错误请求)服务器不理解请求的语法 401表示发送的请求需要有通过HTTP认证的认证信息 403(禁止)服务器拒绝请求 404(未找到)服务器找不到请求网页
(5)5开头的状态码:服务器端错误;
5xx(服务器错误)这些状态码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求的错误 500,(服务器内部错误)服务器遇到错误,无法完成请求 503,表示服务器处于停机维护或超负载,无法处理请求
5.HTTP请求报文和响应报文
请求报文的格式由请求行+请求头+空行+请求体构成。
请求行: 请求方法 + 请求URL+ Http协议版本 请求方法: 常见的HTTP请求方法有GET和POST方法,还有DELETE、HEAD、OPTIONS、PUT、TRACE请求方法
请求头: 常见的请求头:
User-Agent:浏览器类型 Accept:客户端可识别的响应内容类型列表。 Accept-Language:客户端可接收的自然语言。 Accept-Encoding:客户端可接收的编码压缩格式。 Accept-Charset:可接收的应答的字符集。 Host:请求的主机名,允许多个域名同处一个IP 地址,即虚拟主机。 onnection:连接方式(close 或keepalive)。 Cookie:存储于客户端扩展字段,向同一域名的服务器端发送属于该域的cookie content-type:响应类型
空行必须有,空行是头部信息结束的标志;
get方式的请求体为空post方式的请求体可以不为空,
响应报文:
响应报文的格式也是由构成。 报文协议及版本 + 状态码以及状态描述
HTTP状态码
常见的HTTP状态码:
200 - 请求成功 301 - 资源(网页等)被永久转移到其它URL 404 - 请求的资源(网页等)不存在 500 - 内部服务器错误
HTTP状态码分类
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为:(即以上第四个知识点所述!)
响应体会以HTML形式返回
6.HTTP是如何保持连接状态的
#:连接状态保持的方法:cookie+session实现;
Cookie是由服务器端生成,发送给浏览器,浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时自动发送该Cookie给服务器
Cookie可以用来在某个WEB站点会话间持久的保持状态
Session是另一种记录客户状态的机制,基于Cookie实现,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上
客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是Session,客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
通过cookie和session的了解,我们可以看出Cookie的本质就是文件,一般放在请求头里,保存在浏览器上。
由于cookie并不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。并且session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。所以综合考量我们通常使用cookie+session共同完成状态保持。