实现远程登录-配置SSH

✏️作者:风里唤呼声

系列专栏:Linux服务器与应用

目录

       一、认识SSH

(一)SSH的概述

(二)SSH协议

(三)通信过程

二、SSH防止中间人攻击

(一)SSH远程登录流程

(二)首次登录服务器

(三)生存指纹

(四)修改服务器的IP地址映射

(五)测试

三、修改默认登录端口

(一)认识配置文件

(二)修改配置文件

(三)防火墙设置

(四)selinux设置

(五)测试

四、指定专用客户端和用户登录

(一)传密钥

(二)修改配置文件

(三)测试

一、认识SSH

(一)SSH的概述

  • SSH全称Secure Shell,使用TCP协议,允许通信双方使用安全通道交换数据
  • SSH是芬兰的一家公司在1995年开发的
  • 收到版权和加密算法的限制,很多系统采用OpenSSH

1、SSH特点

  • 防止中间人攻击
  • 数据加密、压缩传输
  • 代替 Telnet,为FTP、POP 、PPP 协议提供安全“通道”

2、SSH版本

两个不兼容版本

  •  SSH1:DES、3DE:S、Blowfish和RC4等对称加密算法,RSA实现秘钥交换循环冗余校验码(CRC)保证数据完敷性
  • SSH2:增加了AES、Twofish对称加密算法,DSA(数字签名算法)、DH(Diffie-Hellman)算法代替 RSA完成对称秘钥的交换,HMAC (消息验证代码)代替CRC

3、SSH安全验证

  • 基于口令的安全验证

             .帐号和口令,就可以登录到远程主机,传输的数据都会被加密

  • 基于秘钥的安全验证

              .创建一对密匙,并把公用密匙放在服务器上

(二)SSH协议

实现远程登录-配置SSH_第1张图片

  • 传输层协议(The Transport Layer Protocol):协商和数据处理

              .提服务器认证,数据机密性,信息完整性等的支持;它也可选的提供压缩
              .为SSH其他协议和高层协议提供安全保护

  • 用户认证协议(The User Authentication Protocol):规定了服务器认证客户端用户身份的流程和报文内容。

               .为服务器提供客户端的身份鉴别;

  • 连接协议(TheConnectionProtocol):将安全通道多路分解为多个逻辑通道,以便多个高层应用功效 SSH提供的安全服务。

(三)基于秘钥的安全验证

实现远程登录-配置SSH_第2张图片

 (四)SSH通信过程

  • 版本号协商阶段,SSH 目前包括 SSH1和 SSH2 两个版本双方通过版本协商确定使用的版本双方根据本端
  • 密钥和算法协商阶段,SSH 支持多种加密算法,和对端支持的算法,协商出最终使用的算法
  • 认证阶段,SSH 客户端向服务器端发起认证请求,服务器端对客户端进行认证
  • 会话请求阶段,认证通过后,客户端向服务器端发送会话请求5交互会话阶段会话请求通过后,服务器端和客户端进行信息的交互

1、版本号协商阶段

①服务器打开端口 22,等待客户端连接

②客户端向服务器端发起 TCP 初始连接请求,TCP 连接建立后,服务器向客户端发送第一个报文包括版本标志字符串,格式为“SSH-主协议版本号 >< 次协议版本号 >-< 软件版本号 ”,协议版本号由主版本号和次版本号组成,软件版本号主要是为调试使用

③客户端收到报文后,解析该数据包,如果服务器端的协议版本号比自己的低且客户端能支持服务器端的低版本,就使用服务器端的低版本协议号,否则使用自己的协议版本号

④客户端回应服务器一个报文,包含了客户端决定使用的协议版本号·服务器比较客户端发来的版本号,决定是否能同客户端一起工作

⑤如果协商成功,则进入密钥和算法协商阶段,否则服务器端断开 TCP 连接·Note : 版本号协商阶段报文都是采用明文方式传输的。

2、密钥和算法协商阶段

①服务器端和客户端分别发送算法协商报文给对端,报文中包含自己支持的公钥算法列表、加密算法列表、MAC (Message Authentication Code ,消息验证码) 算法列表、压缩算法列表等

②服务器端和客户端根据对端和本端支持的算法列表得出最终使用的算法


③服务器端和客户端利用 DH交换 ( Diffie-Hellman Exchange算法、主机密钥对等参数,生成会话密钥和会话ID

3、认证阶段

①客户端向服务器端发送认证请求,认证请求中包含用户名、认证方法、与该认证方法相关的内容(如: password 认证时,内容为密码)
②服务器端对客户端进行认证,如果认证失败,则向客户端发送认证失败消息,其中包含可以再次认证的方法列表
③客户端从认证方法列表中选取一种认证方法再次进行认证

④该过程反复进行,直到认证成功或者认证次数达到上限, 服务器关闭连接为止

4、会话请求阶段

①服务器等待客户端的请求
②认证通过后,客户端向服务器发送会话请求
③服务器会向客户服条器处理客户端的请求。请求被成功处理后,端回应 SSH SMSG SUCCESS 包,SSH 进入交互会话阶段:否则回应SSH SMSG FAILURE,表示服务器处理请求失败或者不能识别请求。

5、交互会话阶段

①客户端将要执行的命令加密后传给服务器

②服务器接收到报文,解密后执行该命令,将执行的结果加密发还给客户端
③客户端将接收到的结果解密后显示到终端上

二、SSH防止中间人攻击

摘要:首次访问服务器,SSH会将服务器的公指纹发送给客户端,客户端今将该公钥指纹存到 $HOME/ssh/known hosts之中。下次再连接这服务器,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分直接提示输入密码。

(一)SSH远程登陆服务器

1、双方协商 SSH 协议版本;
2、远程主机收到用户的登录请求,生成公钥并将其发送给客户端;
3、客户端使用该公钥,将登录密码加密后,发送给远程主机;
4、远程主机用私钥解密登录密码,如果密码正确,就同意用户登录

(二)首次登录服务器

[root@client .ssh]# ssh root@server.example.com   //server.example.com 最好换为服务器的IP地址

The authenticity of host 'server.example.com (192.168.1.10)can't be established.
ECDSA key fingerprint isf1:84:66:e9:98:67:28:7b:64:e8:9e:67:7a:90:e1:19
Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added 'server.example.com'(ECDSA) tothe list of known hosts.
Last login: Sat ug 26 10:51:56 2023

(三)生成指纹

[root@client ~]# cd .ssh/
[root@client .ssh]# Is
id_rsa  id_rsa.pub  known hosts

(四)修改服务器的IP地址映射

[root@client ~]# vim /etc/hosts
192.168.1.20 server.example.com
# 将服务器地址修改为其他地址 (模拟攻击)

(五)测试

[root@client .ssh]#ssh [email protected]

@ppppppppppppppppppppppppppgpppaWARNING: POSSIBLE DNS SPOOFING DETECTED!@9@@@@@@ggggg@@@pgpp@@@ppggppaa@@pg0
......

Host key verification failed.
登录失败,原因是ssh 连接的 server 主机的IP地址与第一次连接成功生成的指纹文件~/.ssh/known hosts 中存放的IP地址不一致。

三、修改默认登录端口

(一)认识配置文件

[root@Server server]# cd /etc/ssh/
[root@Server ssh]# ls
ifcfg-ens33  ssh_host_ecdsa_key        ssh_host_rsa_key
moduli       ssh_host_ecdsa_key.pub    ssh_host_rsa_key.pub

ssh_config   ssh_host_ed25519_key
sshd_config  ssh_host_ed25519_key.pub

(二)修改配置文件

将SSH的登录端口修改为61234:

[root@Server ssh]# vim sshd_config

实现远程登录-配置SSH_第3张图片
[root@Server ssh]# systemctl restart sshd.service

(三)防火墙配置

防火墙中开启61234端口:

[root@Server ssh]# firewall-cmd --permanent --add-port=61234

success

[root@Server ssh]# firewall-cmd --reload 
success

(四)selinux配置

1、查看SSH端口的安全上下文:
[root@server ssh]# semanage port -l grep ssh

ssh_port_t             tcp     22


2、修改45000端口的安全上下文:
[root@server ssh]# semanage port -a -t ssh_port_t -p tcp

61234

[root@server ssh]# semanage port -l grep ssh
ssh_port_t            tcp       61234,22

(五)测试

客户端验证:
[root@cilent ~]# ssh -p 45000 [email protected]

Last login: Tue Sep 12 09:47:01 2023 from 192.168.1.20
登录成功
[root@cilent ~]# ssh [email protected]
[root@cilent Desktop]# ssh [email protected]
ssh: connect to host serverexample.com port 22: No route to host
用原默认端口登录失败

四、指定专用用户端和用户登录

限制SSH服务器只能由管理员PC通过admin用户登录,其他用户均无法远程访问服务器

注意:该部分是在修改SSH端口之后的操作,服务端的IP地址为192.168.1.10(即server.example.com)

(一)传密钥

在客户端主机实施密钥登陆操作:


实现远程登录-配置SSH_第4张图片  实现远程登录-配置SSH_第5张图片

(二)修改配置文件

在服务端修改配置文件:


实现远程登录-配置SSH_第6张图片

 

(五)测试

在客户端测试:


实现远程登录-配置SSH_第7张图片

家人们,有啥高见评论区艾特我哦~

实现远程登录-配置SSH_第8张图片

你可能感兴趣的:(Linux服务器技术与应用,ssh,服务器,linux)