第三章 远程连接服务器ssh

远程连接服务器 ssh

远程连接服务器简介

(1)什么是远程连接服务器
远程连接服务器通过文字或图形接口方式来远程登录系统,让你在远程终端前登录linux主机以取得可操作主机接口(shell),而登录后的操作感觉就像是坐在系统前面一样。

(2)远程连接服务器的功能

​ 分享主机的运算能力
(3)远程连接服务器的类型(以登录的连接界面来分类)

  • 文字接口
    明文传输:Telnet、RSH等,目前非常少用
    加密传输:SSH为主,已经取代明文传输
  • 图形接口:XDMCP、VNC、XRDP等

(4)文字接口连接服务器
SSH(Secure Shell Protocol,安全的壳程序协议)它可以通过数据包加密技术将等待传输的数据包加
密后再传输到网络上。ssh协议本身提供两个服务器功能:一个是类似telnet的远程连接使用shell的服务器;另一个就是类似ftp服务的sftp-server,提供更安全的ftp服务。

连接加密技术简介

目前常见的网络数据包加密技术通常是通过“非对称密钥系统”来处理的。主要通过两把不一样的公钥与私钥来进行加密与解密的过程 。

公钥(public key):提供给远程主机进行数据加密的行为,所有人都可获得你的公钥来将数据加密。
私钥(private key):远程主机使用你的公钥加密的数据,在本地端就能够使用私钥来进行解密。私钥只有自己拥有。
SSH工作过程:在整个通讯过程中,为实现SSH的安全连接,服务端与客户端要经历如下五个阶段:

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

第一阶段:TCP三次握手版本协商过阶段:

目前包括SSH1和SSH2两个版本,双方通过版本协商确定使用的版本。

服务端默认已经开启ssh服务,打开了22号端口,等待客户端来连接

服务器向客户端发送第一个报文: 告诉了客户端使用了ssh版本以及软件信息

客户端收到报文之后,拿出服务器的ssh版本,看一下自己是否支持,如果支持使用该版本

第二阶段:协商算法和确定对称秘钥阶段

SSH支持多种加密算法,双方根据本端和对端支持的算法,协商出最终使用的算法:

​ **对称加密:**同一秘钥既可以进行加密也可以进行解密

​ 优势:使用一个秘钥它的加密效率高一些(快一些)

​ 缺陷:秘钥传输的安全性(在网络传输中不传输秘钥)

​ 应用: 传输数据(数据的双向传输)

​ **非对称加密:**产生一对秘:公钥:公钥加密 私钥:私钥解密(不会进行网络传输)

​ 缺陷:公钥的安全性 客户端去访问一个服务器(假设数据被我们的hacker拦截了,hacker发送了自己的公钥给客户端,客户端用 hacker的公钥对数据进行加密,然后hacker用自己的私钥进行解密。从而获取到用户传送的隐私(用户和密码)信息,进一步对服务器动机);传送速度慢(效率低)

​ 优势:安全性更高

​ 应用: 单向的认证阶段(建立安全的连接保证后面对称加密的秘钥安全)

在这里插入图片描述

(1)确认秘钥和加密算法:

​ 秘钥交换的算法

​ 主机秘钥的算法

​ 加密算法

​ 完整性校验的算法

​ 压缩算法

(2)进行秘钥交换:dh迪菲-赫尔曼算法

​ 素数又叫质数。素数,指的是“大于1的整数中,只能被1和这个数本身整除的数”。

20以内的素数:2、3、5、7、11、13、17、19.

​ DH秘钥交换算法数学模型

在这里插入图片描述

  • ​ 客户端发往服务器的DH初始化参数:ecdh public key
  • ​ 客户端发送自己的公钥给服务器
  • ​ 服务端发送自己的公钥给客户端
  • ​ 计算出对称加密的秘钥(sessionkey)–NewKeys
  • ​ 客户端计算出对称加密的秘钥(sessionkey)–newkeys
  • ​ 解决了一个问题:保证了进行传输时候对称加密秘钥的安全。(能不能用的上这个秘钥,还取决于认证阶段是否成功)

第三阶段:认证阶段:

SSH客户端向服务端发起认证请求,服务端对客户端进行认证

(1)基于口令的认证:

在这里插入图片描述
在这里插入图片描述
(2)基于公钥的认证:
在这里插入图片描述
1.Client将自己的公钥存放在Server上,追加在文件authorized_keys中。

2.Server端接收到Client的连接请求后,会在authorized_keys中匹配到Client的公钥pubKey,并生成随机数R,用Client的公钥对该随机数进行加密得到pubKey®,然后将加密后信息发送给Client。

3.Client端通过私钥进行解密得到随机数R,然后对随机数R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给Server端。

4.Server端会也会对R和SessionKey利用同样摘要算法生成Digest2。

5.Server端会最后比较Digest1和Digest2是否相同,完成认证过程。

第四阶段:会话请求阶段

​ 认证通过后,客户端向服务器端发送会话请求,建立新的连接

**第五阶段:交互会话阶段:**会话请求通过后,服务器端和客户端进行信息的交互

​ 传输数据的的阶段:数据时要被加密(对称加密方式),对称加密的秘钥就是sessionKey(客户端和服务服务端在秘钥交换阶段互相计算出来的,sessionKey未进行网络传输)

ssh服务配置

#ssh服务安装包openssh-server
[root@server1 ~]# vim /etc/ssh/sshd_config
17.#Port 22 #监听端口,默认监听22端口 【默认可修改】
18.#AddressFamily any #IPV4和IPV6协议家族用哪个,any表示二者均有
19.#ListenAddress 0.0.0.0 #指明监控的地址,0.0.0.0表示本机的所有地址 【默认可修改】
20.#ListenAddress :: #指明监听的IPV6的所有地址格式
28.HostKey /etc/ssh/ssh_host_rsa_key # rsa私钥认证 【默认】
29.#HostKey /etc/ssh/ssh_host_dsa_key # dsa私钥认证
30.HostKey /etc/ssh/ssh_host_ecdsa_key # ecdsa私钥认证
31.HostKey /etc/ssh/ssh_host_ed25519_key # ed25519私钥认证
43.SyslogFacility AUTHPRIV #当有人使用ssh登录系统的时候,SSH会记录信息,信息保存在/var/log/secure里面
48.#LoginGraceTime 2m #登录的宽限时间,默认2分钟没有输入密码,则自动断开连接
49.#PermitRootLogin yes #是否允许管理员远程登录,'yes'表示允许
51.#MaxAuthTries 6 #最大认证尝试次数,最多可以尝试6次输入密码。之后需要等待某段时间后才能再次输入密码
52.#MaxSessions 10 #允许的最大会话数
59.AuthorizedKeysFile .ssh/authorized_keys #选择基于密钥验证时,客户端生成一对公私钥之后,会将公钥放到.ssh/authorizd_keys里面
79.PasswordAuthentication yes #是否允许支持基于口令的认证
83.ChallengeResponseAuthentication no #是否允许使用键盘输入身份验证,也就是xshell的第三个登录方式
129.#UseDNS yes #是否反解DNS,如果想让客户端连接服务器端快一些,这个可以改为no
146.Subsystem sftp /usr/libexec/openssh/sftp-server #支持 SFTP ,如果注释掉,则不支持sftp连接
154.AllowUsers user1 user2 #登录白名单(默认没有这个配置,需要自己手动添加),允许远程登录的用户。如果名单中没有的用户,则提示拒绝登录

用户登录ssh服务器

实验1:修改ssh服务的端口号

#修改ssh服务的端口号
[root@server1 ~]# vim /etc/ssh/sshd_config
Port 2222
[root@server1 ~]# systemctl disable firewalld
[root@server1 ~]# setenforce  0
[root@server1 ~]# getenforce
Permissive
[root@server1 ~]# systemctl restart sshd

实验2:拒绝root用户远程登陆

#请保持服务器上至少有一个可以远程登陆的普通远程账号
#修改配置文件如下:
#打开该选项并修改参数为no
PermitRootLogin no
#重启服务后生效,使用时使用普通用户进行登陆,需要使用root用户时再切换

实验3:允许特定用户ssh登陆,其他用户都无法登陆

#编辑配置文件,在最后添加如下内容:
AllowUsers USERNAME
#USERNAME为你允许登陆的账号【需要在系统中useradd该账号】,如果是多个用户,中间用空格隔开
#重启ssh服务后生效

实验4:linux客户端通过秘钥登录linux服务端root用户

#创建密钥对
[root@web ~]# ssh-keygen -t rsa
ssh-keygen 生成、管理和转换认证密钥 -t制定类型 RSA
/root/.ssh/id_rsa私钥文件
/root/.ssh/id_rsa.pub公钥文件
#复制该公钥文件到服务端的该目录下
[root@web ~]# ssh-copy-id root@192.168.40.132
#在本地服务器上登陆对端服务器
[root@web ~]# ssh root@192.168.40.132

1、

client --windows

工具—生成用户密钥向导—RSA–2048-----保存为文件(位置建议放到桌面)id_rsa2048.pub

xftp—将i_rsa2048.pub发送到server主机

判断server主机是否有.ssh隐藏目录,没有用mkdir ~/.ssh

验证:client–ssh连接server

server --linux

更改ssh的公钥验证文件名

mv id_rsa2048.pub /root/.ssh/authorized_keys

2、

client linux 192.168.10.129

#ssh-keygen -t RSA

#ll ~/.ssh

查看一个公钥文件和私钥文件

#ssh-copy-id 192.168.10.130

验证:#ssh 192.168.10.130

​ #ip a

server linux 192.168.10.130

sa2048.pub /root/.ssh/authorized_keys

2、

client linux 192.168.10.129

#ssh-keygen -t RSA

#ll ~/.ssh

查看一个公钥文件和私钥文件

#ssh-copy-id 192.168.10.130

验证:#ssh 192.168.10.130

​ #ip a

server linux 192.168.10.130

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-01 16:42:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-01 16:42:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-01 16:42:02       82 阅读
  4. Python语言-面向对象

    2024-04-01 16:42:02       91 阅读

热门阅读

  1. 设计模式-单例模式(双重检查)

    2024-04-01 16:42:02       38 阅读
  2. Kafka面试宝典

    2024-04-01 16:42:02       41 阅读
  3. GeniusWeb方法详解

    2024-04-01 16:42:02       42 阅读
  4. Vue 中使用 Canvas 绘制二维码

    2024-04-01 16:42:02       35 阅读
  5. Vue 自定义组件库通过配置调整样式?

    2024-04-01 16:42:02       36 阅读
  6. js当中的双等于运算符

    2024-04-01 16:42:02       40 阅读
  7. 2024年3月个人工作生活总结

    2024-04-01 16:42:02       41 阅读
  8. 【nginx】nginx通过配置文件阻止海外ip访问

    2024-04-01 16:42:02       37 阅读
  9. 使用 Error Boundary 捕获 React 组件错误

    2024-04-01 16:42:02       42 阅读
  10. c++20中的jthread再谈

    2024-04-01 16:42:02       34 阅读
  11. 自动化脚本:快速修改Linux主机IP地址配置

    2024-04-01 16:42:02       35 阅读