远程连接服务器
例子:在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版本及软件信息
客户端收到报文后,拿出服务器的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)]
对称加密:加密解密使用相同的密钥
难点:如何确保密钥的安全性(如何在网络传输中不传输密钥)
优点:因为使用一个密钥加密效率更高
非对称加密:一对密钥:公钥和私钥,使用公钥加密使用私钥解密
公钥和私钥:公钥:公开的, 私钥:自己持有的私有的密钥(不会再网络传输),解决了密钥安全性问题
缺陷:客户端去访问一个服务器(假设数据被hacker(黑客)拦截,hacker)发送了自己的公钥给 客户端,客户端用hacker的公钥对数据进行加密,然后hacker用自己的私钥进行解密。获取到用户 的用户名和密码,进一步对服务器进行攻击
![]()
优点:保证了密钥的安全性
根据对称加密和非对称加密的特性
解决了一个问题:保证了进行传输时候对称加密密钥的安全(内否成功使用还取决于认证阶段是否成功)
认证阶段:
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文件
第二次登录,会去文件中寻找这个文件,如果存在则没有提示
基于公钥的认证:使用分对称加密(公钥)进行登录
免密登录:登陆时不需要密码
- 客户端要生成一对密钥(非对称i加密):公钥和私钥
- 将客户端的公钥添加到服务器对应的用户的~/.ssh/authorized_keys
- 客户端接去访问服务器:服务器会随机生成一个随机数(R),并且使用客户端公钥对R进行加密Pub(R),然后将 Pub(R)发送给客户端
- 客户端接收到服务器发送过来的数据Pub®,客户端使用自己的私钥进行解密,拿到随机数R
- 使用MD5(hash算法:单项不可逆)对随机数R和SessionKey(对称加密的密钥,在第二阶段产生的)加密生成一个摘要Digest1,发送给服务器
- 服务器接收到之后,拿到Digest1,使用相同的MD5短发,对R和SessionKey进行加密拿到Digest2,只需比较Digest1和Digest2是否相等,相等:登陆成功;不相等:登陆失败
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rc5scVaf-1691406313632)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20230807164118955.png)]
手动完成的步骤:
- 客户端要生成一对密钥(非对称i加密):公钥和私钥
- 将客户端的公钥添加到服务器对应的用户的~/.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)
练习:
-
修改端口号: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
-
进制用户远程登录
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)]