远程连接服务器

远程连接服务器

例子:在VMware上安装了Linux,正确配置了IP,Xshell可以连接到Linux,为什么安装了之后配置了IP就可以连接?

答案:Linux之后,会帮我们预装一个软件:SSH软件(远程连接的软件)安装了SSH的Linux,就是一个远程连接服务器,可以通过SSH协议连接到Linux,如果没有这个软件或者服务没有开启是连接不上的

远程连接服务器概念:

使用图形或者文字的方式来远程登录服务器。

文字方式:SSH(加密传输),telnet(明文传输)

图形的方式:VNC

远程连接:连接的是Linux上一个虚拟终端(shell),比如说在xshell上去执行命令(SSH)通过SSH将我们要执行命令传输给Linux,Linux去执行,执行完成之后将结果返回给我们的SSH连接

类型:

文字接口
	明文传输:telnet
	加密传输:SSH
图形:VNC

SSH远程连接

了解工作流程

连接方式:

​ 第一种:用户名+密码

借助Windows上的SSH

Windows去连接Linux的时候:

Windows有一个虚拟网卡:vmnet8

windows去链接Linux的时候:通过vmnet8(192.168.31.1)通过网关去连接Linux,中间经过了交换机(vmnet -> 编辑-虚拟网络编辑器 -> vmnet8)

C:\Users\86173>ssh root@192.168.31.122
The authenticity of host '192.168.31.122 (192.168.31.122)' can't be established.
ECDSA key fingerprint is SHA256:PnmQDase1OdJTY9NsEmaR6SAxVS37TqNBUPo8hKX554.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.31.122' (ECDSA) to the list of known hosts.
root@192.168.31.122's password:
Last login: Mon Aug  7 08:57:06 2023 from 192.168.31.1
[root@localhost ~]#

抓包:wireshark(独立使用)

ssh工作流程:

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

版本号协商阶段:

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

image-20230807143358153

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6aVFi1XI-1691406313624)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20230807143740858.png)]

密钥和算法协商阶段

客户端发往服务器的数据报:key exchange init 密钥交换初始化[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T9uyIZyd-1691406313625)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20230807144508367.png)]

服务器发往客户端:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v6dNCrP8-1691406313626)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20230807145027053.png)]

确认密钥和加密算法:

密钥交换算法[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SBf2UGTc-1691406313626)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20230807145430885.png)]

主机密钥算法[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FeQdLMyq-1691406313627)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20230807145517910.png)]

加密算法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-diwqXbxg-1691406313627)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20230807145633223.png)]

完整性校验算法[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VrXZ2cL1-1691406313628)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20230807145654161.png)]

压缩算法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-krjgEsAb-1691406313629)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20230807145715108.png)]

进行密钥交换:dh算法

客户端发往服务器的dh初始化参数:ecdh public key

客户端(Alice)发送自己的公钥给服务器(Bob)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aSgP2LXU-1691406313629)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20230807155356513.png)]

服务器(Bob)发送自己的公钥给客户端(Alice)

计算出我们的对称加密的密钥(sessionkey)->New Keys[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gomNVS8f-1691406313630)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20230807155430461.png)]

客户端计算出对称加密的密钥(sessionkey)->New keys

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ap0cpAfB-1691406313631)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20230807155850949.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1eUIRvTG-1691406313631)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20230807153225723.png)]

对称加密:加密解密使用相同的密钥

​ 难点:如何确保密钥的安全性(如何在网络传输中不传输密钥)

​ 优点:因为使用一个密钥加密效率更高

非对称加密:一对密钥:公钥和私钥,使用公钥加密使用私钥解密

​ 公钥和私钥:公钥:公开的, 私钥:自己持有的私有的密钥(不会再网络传输),解决了密钥安全性问题image-20230807115511772

​ 缺陷:客户端去访问一个服务器(假设数据被hacker(黑客)拦截,hacker)发送了自己的公钥给 客户端,客户端用hacker的公钥对数据进行加密,然后hacker用自己的私钥进行解密。获取到用户 的用户名和密码,进一步对服务器进行攻击

image-20230807120503678

​ 优点:保证了密钥的安全性

根据对称加密和非对称加密的特性

解决了一个问题:保证了进行传输时候对称加密密钥的安全(内否成功使用还取决于认证阶段是否成功)

认证阶段:

SSH客户端向服务器发起认证请求,服务器端对客户端进行认证分为两种

基于口令的认证:使用自己的用户名+密码进行登录

C:\Users\86173>ssh root@192.168.31.122
The authenticity of host '192.168.31.122 (192.168.31.122)' can't be established.
#无法建立主机“192.168.31.122(192.168.31.122)”的真实性。

ECDSA key fingerprint is SHA256:PnmQDase1OdJTY9NsEmaR6SAxVS37TqNBUPo8hKX554.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
#你确定要继续连接吗(是/否/公钥指纹)?
 
当我们第一次登录:他会将服务器的公钥保存扫一个文件中:~/.ssh/know_hosts文件
第二次登录,会去文件中寻找这个文件,如果存在则没有提示

基于公钥的认证:使用分对称加密(公钥)进行登录

免密登录:登陆时不需要密码

  1. 客户端要生成一对密钥(非对称i加密):公钥和私钥
  2. 将客户端的公钥添加到服务器对应的用户的~/.ssh/authorized_keys
  3. 客户端接去访问服务器:服务器会随机生成一个随机数(R),并且使用客户端公钥对R进行加密Pub(R),然后将 Pub(R)发送给客户端
  4. 客户端接收到服务器发送过来的数据Pub®,客户端使用自己的私钥进行解密,拿到随机数R
  5. 使用MD5(hash算法:单项不可逆)对随机数R和SessionKey(对称加密的密钥,在第二阶段产生的)加密生成一个摘要Digest1,发送给服务器
  6. 服务器接收到之后,拿到Digest1,使用相同的MD5短发,对R和SessionKey进行加密拿到Digest2,只需比较Digest1和Digest2是否相等,相等:登陆成功;不相等:登陆失败

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rc5scVaf-1691406313632)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20230807164118955.png)]

手动完成的步骤:

  1. 客户端要生成一对密钥(非对称i加密):公钥和私钥
  2. 将客户端的公钥添加到服务器对应的用户的~/.ssh/authorized_keys

会话请求阶段:

认证通过后,客户端回想服务器端发送会话请求,建立了一个新的连接

交互会话阶段:

会话请求通过后,服务器和客户端进行信息的交互

传输数据的阶段:

数据是要被加密(对称加密),对称加密的密钥就是SessionKey(客户端和的服务器端密钥交互的阶段相互结算出来的,sessionkey未进行网络传输 )

配置

安装Linux系统,一般都会预装ssh软件 对应的Linux服务叫做sshd

配置文件目录:/etc/ssh/

​ 公钥:public key -> pub

​ 私钥:private key -> key

[root@localhost ~]# tree /etc/ssh/
/etc/ssh/
├── moduli		#存放密钥交换算法中奇数g,模数p
├── ssh_config	#客户算的配置文件
├── sshd_config	#ssh服务端配置文件 (主要要了解的文件)
├── ssh_host_ecdsa_key	#私钥
├── ssh_host_ecdsa_key.pub	#公钥
├── ssh_host_ed25519_key
├── ssh_host_ed25519_key.pub
├── ssh_host_rsa_key
└── ssh_host_rsa_key.pub

sftp: ssh+ftp

常见命令:

查看本地端工作路径:lpwd

查看远端工作路径:pwd

本地端多加 l(local)

传输文件

从本地端向远端传输文件:上传(put)

从远端向本地端传输文件:下载(get)

练习:

  1. 修改端口号:ssh默认使用端口号,不想让ssh服务使用22端口号,让他使用2222端口号

    修改 /etc/ssh/sshd_config
    
    #Port 22
    #AddressFamily any
    #ListenAddress 0.0.0.0
    #ListenAddress ::
    Port 2222
    
    注意:sshd_config中带#的行是注释内容,不生效
    	修改完后不会立即生效,需要重新加载配置才能生效
    [root@localhost ~]# systemctl restart sshd
    查看状态
    [root@localhost ~]# systemctl status sshd
    ● sshd.service - OpenSSH server daemon
       Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
       Active: active (running) since Mon 2023-08-07 17:37:55 CST; 1min 10s ago
         Docs: man:sshd(8)
               man:sshd_config(5)
     Main PID: 1598 (sshd)
       CGroup: /system.slice/sshd.service
               └─1598 /usr/sbin/sshd -D
    
    Aug 07 17:37:55 localhost.localdomain systemd[1]: Starting OpenSSH server daemon...
    Aug 07 17:37:55 localhost.localdomain sshd[1598]: Server listening on 0.0.0.0 port 2222.
    Aug 07 17:37:55 localhost.localdomain sshd[1598]: Server listening on :: port 2222.
    Aug 07 17:37:55 localhost.localdomain systemd[1]: Started OpenSSH server daemon.
    [root@localhost ~]# ss -tnl
    State      Recv-Q Send-Q         Local Address:Port                        Peer Address:Port
    LISTEN     0      128                        *:2222                                   *:*
    LISTEN     0      80                      [::]:3306                                [::]:*
    LISTEN     0      128                     [::]:2222                                [::]:*
    验证:
    windows的cmd去登陆:-p 2222选择端口号
    C:\Users\86173>ssh -p 2222 root@192.168.31.122
    
    
  2. 进制用户远程登录

PermitRootlogin yes
修改成
PermitRootlogin no
然后重启服务
systemctl restart sshd

3.允许某些用户远程登录不允许部分永不登录

AllowUser :白名单

在配置文件里添加AllowUser 后跟的用户可以远程登录其他用户不能远程登录

免密登录

在客户端生成一堆密钥(公钥 和私钥)

以Windows去连接Linux:免密登录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kLuRxb70-1691406313633)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20230807185959382.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值