内容预知
1.SSH的介绍及其相关知识点
1.1 SSH的简介
SSH 为 Secure shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登陆会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
SSH 启用的端口为:TCP22号端口
1.2 SSH的优点
SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。S S H最初是U N I X系统上的一个程序,后来又迅速扩展到其他操作平台。S S H在正确使用时可弥补网络中的漏洞。客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。
- 数据传输的过程是加密的,具有安全稳定的特点
- 数据传输的方式是压缩的,可以提高传输速度
1.3 常用的SSH软件的介绍
SSH客户端:putty(开源工具),xshell,CRT
SSH服务端:openSSH(centos7系统默认安装)
centos7 ssh服务启动自检命令: systemctl is-enabled sshd
1.4 SSH 的组成
传输层协议 [SSH-TRANS]
提供了服务器认证,保密性及完整性。此外它有时还提供压缩功能。 SSH-TRANS 通常运行在TCP/IP连接上,也可能用于其它可靠数据流上。 SSH-TRANS 提供了强力的加密技术、密码主机认证及完整性保护。该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上。
用户认证协议 [SSH-USERAUTH]
用于向服务器提供客户端用户鉴别功能。它运行在传输层协议 SSH-TRANS 上面。当SSH-USERAUTH 开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希H )。会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。 SSH-USERAUTH 也需要知道低层协议是否提供保密性保护。
连接协议 [SSH-CONNECT]
将多个加密隧道分成逻辑通道。它运行在用户认证协议上。它提供了交互式登录话路、远程命令执行、转发 TCP/IP 连接和转发 X11 连接。
1.5 SSH的密钥登录
密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥。而ssh密钥就是一种非对称性的密钥。
ssh 远程访问控制中不仅仅可以使用用户密码登录,还可以通过 密钥进行登录。而密钥登录的产生是通过客户端与服务端进行一系列的操作过程产生的。
密钥登录的过程:
1. ssh客户端通过ssh-keygen
生成自己的公钥和私钥,将公钥发送给ssh服务端,并且放在指定的位置。
2.公钥发送完毕后。ssh客户端再向ssh 服务端进行登录请求。
3.ssh服务端收到ssh客户端的登录请求后,ssh服务端用对应的公钥加密一些随机数返回给ssh客户端。
4.ssh客户端收加密的随机数后使用私钥对其进行解密,再将解密的结果发送给ssh服务端进行验证。
5. ssh服务端接收到ssh客户端发送过来的解密数据,将其与原数据进行比对,保持一致则允许用户进行登录
2. SSH的运用
2.1 ssh配置文件信息
在Linux中实现ssh,是通过openSSH的sshd服务提供的。
2.1.1存放ssh服务端的配置文件
/etc/ssh/sshd_config
vim /etc/ssh/sshd_config
常用选项配置
#Port 22
#ListenAddress 0.0.0.0
常用配置项:
#LoginGraceTime 2m 登录验证时间为两分钟
#PermitRootLogin yes 允许root用户登录(安全考虑,这里可以设置为no,禁止root用户登录)
#MaxAuthTries 6 最大重试的次数为6
PasswordAuthentication yes 允许空密码用户登录
UseDNS no 禁止DNS反向解析,提高服务器的响应速度
2.1.2 存放ssh客户端的配置文件
/etc/ssh/ssh_config (该配置基本默认保持不变,就可以了)
2.2 ssh在Linux中的密码登录
ssh [远程主机用户名]@[远程服务器主机名或IP地址] [-p port]
[root@localhost7 ~]# ssh 192.168.73.110
exit 退出当前用户
[root@localhost7 ~]# ssh -p 22 zhangsan@192.168.73.110
2.3 利用ssh协议传输文件和获取文件
ssh scp sftp 都是默认使用ssh协议,端口为 tcp 22
2.3.1 scp传输文件
scp [-r 目录] 文件 [用户]@服务端IP:保存路径(如果端口号修改过,就用-P进行指定)
[root@localhost6 opt]# scp shiyan.zip root@192.168.73.111:/opt
2.3.2 scp获取服务端的文件
scp [-P] [用户]@服务端IP:保存路径 本地路径
[root@localhost6 opt]# scp root@192.168.73.111:/opt/shiyan.zip /opt
2.3.3 sftp远程访问操作
sftp [-P] 用户@服务端IP (当默认端口改变时,可以用-P指定)
[root@localhost6 opt]# sftp root@192.168.73.111
3. ssh密钥登录操作
实验目的
上面的内容均为在密码登录的前提,但是存在着极大的安全隐患。密码登录是可以别破译密码软件进行暴力破解,从而远程访问,此时会造成相关的损失。而密钥登录,会对安全性访问更有利。
实验准备
准备两台虚拟机,一台当作ssh客户端,一台当作ssh服务端,检查一下ssh相关服务的软件包和功能是否正常即可。
实验设计图
实验验证
一组密钥对是客户端的某一个用户和服务端的某一个用户之间建立的联系,其他用户无法使用该密钥获取登录
实验步骤
第一步:在客户端中创建密钥
[root@localhost6 ~]# ssh-keygen -t rsa
[zhangsan@localhost ~]$ cd /home/zhangsan/.ssh
[zhangsan@localhost .ssh]$ ls
第二步:把公钥文件导入到ssh服务端
方式1:手动导公钥进服务器
[zhangsan@localhost .ssh]$ scp id_rsa.pub root@192.168.73.111:/opt
切换到服务端,安置公钥
cd /opt/
ls
vim /root/.ssh/authorized_keys
末行模式
:!cat /opt/id_rsa.pub
并且保存退出
方式2:自动导公钥入服务器
ssh-copy-id -i 公钥文件 用户@服务端IP
第三步:进行测试
测试一:客户端zhangsan访问服务端root
[zhangsan@localhost .ssh]$ ssh root@192.168.73.111
测试二:客户端root访问服务端root
[root@localhost ~]# ssh root@192.168.73.111
测试三:客户端zhangsan 访问服务端wangwu
[zhangsan@localhost .ssh]$ ssh wangwu@192.168.73.111
4.TCP_wapper的原理和运用
4.1 TCP_wapper的工作原理
TCP_Wrappers有一个TCP的守护进程叫作tcpd。以ssh为例,每当有ssh的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件,符合要求,则会把这次连接原封不动的转给真正的ssh进程,由ssh完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供ssh服务。
4.2 TCP_Wrappers的运用
/etc/hosts.allow 设置允许访问 tcp 服务程序的策略(白名单)
/etc/hosts.deny 设置禁止访问 tcp 服务程序的策略 (黑名单)
假设引用
只允许IP地址为192.168.73.110的用户访问sshd服务,其他地址被拒绝。
白名单设置:
vim /etc/hosts.allow
sshd:192.168.73.110
如果不确定该服务是否符合TCP_wapper的标准:
[root@localhost ~]# ldd $(which sshd)|grep wrap
黑名单设置:
vim /etc/hosts.deny
sshd:ALL
保存后,立即生效!
测试
测试一:指定允许的客户端使用
测试二:其他客户端进行访问
黑名单和白名单的设置原理:先看 hosts.allow 文件中的设置,匹配上则直接放通,如果没有匹配则 再去看 hosts.deny 文件中的设置,匹配上则禁止/拒绝访问指定的tcp服务程序,如果也没有匹配上则默认允许放通
总结
1. 熟知ssh密钥生成的过程,用于对ssh访问的加密,符合更安全的远程控制标准
2.当我们获得一台新的服务器时,为了更安全,取消掉root用户的远程访问
3.ssh中有更高效的传输获取功能,可以加以利用。
4.TCP_Wrappers中的黑白名单,可以大量高效的设置可访问服务端的用户及其能够访问的服务