目录
ssh 协议
- 远程连接加密协议,加密压缩
- 一种安全通道协议
- 对通信数据进行了数据加密处理,用于远程管理
—— SSH客户端<--------------网络---------------->SSH服务端
—— 服务名称:sshd
—— 服务端主程序:/usr/sbin/sshd
—— 服务端配置文件:/etc/ssh/sshd_config
ssh 原理
公钥传输原理
解析
- 客户端首次发起连接
- 服务端会生成一个随机会话 ID ,会将服务端的公钥以及会话 ID 发给客户端
- 客户端收到会话 ID 以及服务端的公钥,会用客户端自己的公钥以及会话 ID 做运算,产生一个结果,然后再用服务端的公钥加密,将这个加密得到的结果传给服务端
- 服务端收到加密结果后,会用自己的私钥解密得到客户端的公钥和会话 ID 运算的结果,因为已知会话 ID ,所以就可以得到客户端的公钥
- 最后双方持有对面的公钥
ssh 加密通讯原理
ssh 登录
方法一:ssh 远程主机用户名@远程服务器主机名或IP地址 -p
如果是普通用户,则添加 -p
方法二:ssh -l 远程主机用户名 远程服务器主机名或IP地址 -p
-l :指定登录名称
-p :指定登录端口,当服务端的端口非默认时,需要使用 -p
登出 ssh
—— exit
服务端配置常用配置项
进入配置文件 /etc/ssh/sshd_config 查看配置文件
sshd 服务支持登录验证方式
—— 密码验证
以服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户机角度来看,正在连接的服务器有可能被假冒,从服务器角度来看,当遭遇密码暴力破解攻击时防御能力比较弱。
—— 密钥对验证
要求提供相匹配的密钥信息才能通过验证,通常先在客户机中创建一对密钥文件(公钥和私钥),然后将公钥文件放到服务器中的指定位置,远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,增强了远程管理的安全性
—— 公钥和私钥是成对生成的,这两个密钥互不相同,可以互相加密和解密
—— 不能根据一个密码来推算出另一个密钥
—— 公钥对外公开,私钥只有私钥的持有人才知道
ssh服务的最佳实践
-
建议使用非默认端口 22
-
禁止使用protocol version 1
-
限制可登录用户 白名单
-
设定空闲会话超时时长
-
利用防火墙设置ssh访问策略
-
仅监听特定的IP地址 公网 内网
-
基于口令认证时,使用强密码策略,比如:tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs
-
使用基于密钥的认证
-
禁止使用空密码
-
禁止root用户直接登录
-
限制ssh的访问频度和并发在线数
-
经常分析日志 分离
实际操作实验
修改默认端口
1. 进入配置文件 /etc/ssh/sshd_config 并进行修改
禁止 root 用户登录
1. 进入配置文件 /etc/ssh/sshd_config 并进行修改
注:此步虽然阻止了 root 用户登录,但是普通用户可以通过使用命令 su 切换到 root 用户
2. 修改 pam 认证模块,进入配置文件 /etc/pam.d/su
注:此步将彻底无法使用 root 用户,此步的意义在于,普通用户无法使用 su 命令
黑白名单列表
1. 进入配置文件 /etc/ssh/sshd_config 并进行添加配置
命令格式解析:
ALLowUsers sy@192.168.88.99 sy
固定命令 远程主机名@远程主机IP 要添加的用户名
输错密码限制
1. 进入配置文件 /etc/ssh/sshd_config 并进行修改
注:数字为自定义,定义输错密码的次数
ssh -t
命令举例:用于连接多个服务器
ssh -t 192.168.91.101 ssh -t 192.168.91.102 ssh 192.168.91.103
方便跳板连接
免交互验证登录
1. 生成密钥,命令为 ssh-keygen