目录
1.SSH服务
1.1 SSH基础
什么是SSH服务器?
SSH (Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。
- 是一种安全通道协议
- 对通信数据进行了加密处理,用于远程管理
- 压缩功能
2、SSH的优点
数据传输是加密的,可以防止信息泄漏
数据传输是压缩的,可以提高传输速度
3、SSH的客户端与服务端
客户端
Linux 客户端: ssh, scp, sftp,slogin
Windows 客户端:xshell, MobaXterm,putty, securecrt, ssh secure shell client
SSH客户端的配置文件:/etc/ssh/ssh_config
服务端
SSH服务端:OpenSSH (开源)
ssh服务端主要包括两个服务功能:ssh远程连接和sftp服务(文件传输功能)
- 客户端发起链接请求
- 服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
- 客户端生成密钥对
- 客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
- 客户端发送加密后的值到服务端,服务端用私钥解密,得到Res
- 服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
- 最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密
1.2ssh远程登录
每次使用sshd登录到其他主机,双方都会生成一个文件known_hosts把对方主机的公钥在.ssh/known_hosts文件里
登录方法一
ssh [远程主机用户名]@[远程服务主机名或IP地址] -p 端口号
(不加- p 默认端口号为22)
登录方法二
ssh -l [远程主机用户名] [远程服务器主机名或IP地址] -p port
-l 指定登录名称
-p 指定登录端口(当服务端的端口非默认时,需要使用 -p)
-o 可以把配置文件放后面
1.2.1 免密登录
使用密钥对及面交互验证登录
原理:
-
用户/密码
-
基于秘钥
用户/密码:
1.生成公钥和私钥
2.将公钥导给对面
首先在客户端生成一对密钥(ssh-keygen)
并将客户端的公钥ssh-copy-id 拷贝到服务端
当客户端再次发送一个连接请求,包括ip、用户名
服务端得到客户端的请求后,会到authorized_keys()中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:kgc
服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录
第一步 免密实现 实验准备
准备客户端 服务端 并关闭防火墙
1、systemctl stop firewalld
2、setenforce 0
第二步在客户端生成一个密钥
第三步将建好的密钥发送给服务端
第四步 验证能否免密登录
ssh服务的最佳实践
-
建议使用非默认端口 22
-
禁止使用protocol version 1
-
限制可登录用户 白名单
-
设定空闲会话超时时长
-
利用防火墙设置ssh访问策略
-
仅监听特定的IP地址 公网 内网
-
基于口令认证时,使用强密码策略,比如:tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs
-
使用基于密钥的认证
-
禁止使用空密码
-
禁止root用户直接登录
-
限制ssh的访问频度和并发在线数
-
经常分析日志 分离
-
禁用反向dns