概念摘要
SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。
SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令。
因此SSH协议具有很好的安全性。
22网络 传输层tcp 22
SSH客户端<--------------------------------------->SSH服务端
数据传输是加密的,可以防止信息泄漏
数据传输是压缩的,可以提高传输速度
SSH客户端:Putty、Xshell、CRT
SSH服务端:OpenSSH
OpenSSH 是实现 SSH 协议的开源软件项目,适用于各种 UNIX、Linux 操作系统。
CentOS 7系统默认已安装openssh相关软件包,并已将 sshd 服务添加为开机自启动。
执行“systemctl start sshd”命令即可启动 sshd 服务
sshd 服务使用的默认端口号为 22
sshd 服务的默认配置文件是/etc/ssh/sshd_config
ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于前者是针对客户端的配置文件,后者则是针对服务端的配置文件。
SSH的优点
SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
S S H最初是U N I X系统上的一个程序,后来又迅速扩展到其他操作平台。
S S H在正确使用时可弥补网络中的漏洞。
客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。
数据传输的过程是加密的,具有安全稳定的特点
数据传输的方式是压缩的,可以提高传输速度
常用的SSH软件的介绍
SSH客户端:putty(开源工具),xshell,CRT
SSH服务端:openSSH(centos7系统默认安装)
SSH 的组成
传输层协议 [SSH-TRANS]
提供了服务器认证,保密性及完整性。
此外它有时还提供压缩功能。
SSH-TRANS 通常运行在TCP/IP连接上,
也可能用于其它可靠数据流上。
SSH-TRANS 提供了强力的加密技术、密码主机认证及完整性保护。
该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上。
用户认证协议 [SSH-USERAUTH]
用于向服务器提供客户端用户鉴别功能。
它运行在传输层协议 SSH-TRANS 上面。
当SSH-USERAUTH 开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希H )。
会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。 SSH-USERAUTH 也需要知道低层协议是否提供保密性保护。
连接协议 [SSH-CONNECT]
将多个加密隧道分成逻辑通道。
它运行在用户认证协议上。
它提供了交互式登录话路、远程命令执行、转发 TCP/IP 连接和转发 X11 连接。
SSH的密钥登录
密钥是一种参数,
它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥。
而ssh密钥就是一种非对称性的密钥。
ssh远程访问控制中不仅仅可以使用用户密码登录,还可以通过 密钥进行登录。
而密钥登录的产生是通过客户端与服务端进行一系列的操作过程产生的。
密钥登录的过程:
1. ssh客户端通过ssh-keygen生成自己的公钥和私钥,将公钥发送给ssh服务端,并且放在指定的位置。
2.公钥发送完毕后。ssh客户端再向ssh 服务端进行登录请求。
3.ssh服务端收到ssh客户端的登录请求后,ssh服务端用对应的公钥加密一些随机数返回给ssh客户端。
4.ssh客户端收加密的随机数后使用私钥对其进行解密,再将解密的结果发送给ssh服务端进行验证。
5. ssh服务端接收到ssh客户端发送过来的解密数据,将其与原数据进行比对,保持一致则允许用户进行登录
配置OpenSSH服务端
![](https://img-blog.csdnimg.cn/img_convert/73d4f0cc131d7ed9fcc4cf85a1d30a18.png)
![](https://img-blog.csdnimg.cn/img_convert/df466069212048870288390db4395932.png)
sshd_config配置文件的常用选项设置
vim /etc/ssh/sshd_config
Port 22 #监听端口为22 #生产中最好改一下
ListenAddress 0.0.0.0 #监听地址为任意网段,也可以指定OpenSSH服务器的具体IP
LoginGraceTime 2m #登录验证时间为2分钟
PermitRootLogin no #禁止root用户登录
MaxAuthTries 6 #最大重试次数为 6 #即使有6次,还是依旧可以无限尝试
PermitEmptyPasswords no #禁止空密码用户登录
UseDNS no #禁用 DNS 反向解析,以提高服务器的响应速度
#只允许dxl,yht用户登录,且其中yht用户仅能够从IP地址为192.168.142.20的主机远程登录
#禁止某些用户登录,用法于AllowUsers 类似(注意不要同时使用,同一用户即禁止又允许)
DenyUsers qzz
基础ssh
![](https://img-blog.csdnimg.cn/img_convert/462f9c6996509e94c4283582477f6326.png)
创建3 个用户
![](https://img-blog.csdnimg.cn/img_convert/6e80b4e38933bd4d8f223594b7b42d4b.png)
test1连接了test2
![](https://img-blog.csdnimg.cn/img_convert/2b80119eb44bfba52462bb4d7d4a47c8.png)
一般连接用户后退出用户登陆用 exit
更改配置文件vim /etc/ssh/sshd_config
![](https://img-blog.csdnimg.cn/img_convert/7eb35124ca59faba546cdd8a08500f28.png)
将端口更改为11222
![](https://img-blog.csdnimg.cn/img_convert/72c01dafc0aa463e37877dcbac7dd8ea.png)
关闭防火墙,安全机制之后重启服务
![](https://img-blog.csdnimg.cn/img_convert/ce8bb22464e25256ff6cdeb1c3e83078.png)
10022端口成功连接
![](https://img-blog.csdnimg.cn/img_convert/be841d52b3a90d499e053d15ea2ffbb1.png)
![](https://img-blog.csdnimg.cn/img_convert/5654ef22ce95a7d0530c54191183dfa4.png)
此时test2连接test1连接不上
![](https://img-blog.csdnimg.cn/img_convert/bbe0650d16dabe97b64b3922bb5e0450.png)
输入ssh -p即可
禁止root登陆
![](https://img-blog.csdnimg.cn/img_convert/3e1570ce2718abacac75fcf3a1aa1e99.png)
登陆黑白名单
vim /etc/ssh/sshd_config
![](https://img-blog.csdnimg.cn/img_convert/1d46934d86562327301c5a3db5d18784.png)
![](https://img-blog.csdnimg.cn/img_convert/49b0cf47a52e89583f6d8273a674273d.png)
![](https://img-blog.csdnimg.cn/img_convert/50c7051e96b2e256380adfe643ec88a3.png)
此时test2和test3都可以连接test dxl
![](https://img-blog.csdnimg.cn/img_convert/1c7484095d8b602ad1b6930de0d12fef.png)
![](https://img-blog.csdnimg.cn/img_convert/d5efe78d50bd93ac4d9d4dbe571c7856.png)
yht只能test3登录
![](https://img-blog.csdnimg.cn/img_convert/1257acc0f2373031105d17dbb8afa0ed.png)
![](https://img-blog.csdnimg.cn/img_convert/0df1659ae33e4ebbcedff83b4dedbf18.png)
qzz所有设备都登录不了
scp远程复制
![](https://img-blog.csdnimg.cn/img_convert/ed920048563f905fb5b773d9c8cf6ff9.png)
scp 复制文件、scp -r 复制目录、scp -P 增加指定端口号
![](https://img-blog.csdnimg.cn/img_convert/aa2a7f8131629946375d30cd5becf38b.png)
sftp安全FTP
由于使用了加密/解密技术,所以传输效率比普通的FTP要低,但安全性更高。操作语法sftp与ftp几乎一样。
![](https://img-blog.csdnimg.cn/img_convert/1f457144c8ee5442971926110feca71e.png)
get文件
![](https://img-blog.csdnimg.cn/img_convert/b3b79d6833e74f22edaaca32460d9819.png)
put文件 也在家目录
![](https://img-blog.csdnimg.cn/img_convert/0528d9e2695e59f4c8db63ad23f3324c.png)
![](https://img-blog.csdnimg.cn/img_convert/59cfdc2de000a1073d33c27cfd00bf3f.png)
构建密钥对
![](https://img-blog.csdnimg.cn/img_convert/8076ff406397811b29cdb5846faa766e.png)
1.密码验证
对服务器中本地系统用户的登录名称、密码进行验证。简便,但可能会被暴力破解,暴力破解可看之前博客有详细描述系统弱口令检测
2.密钥对验证
要求提供相匹配的密钥信息才能通过验证。通常先在客户端中创建一对密钥文件(公钥、私钥),
然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证。
能增强安全性,且可以免交互登录。
当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证。可根据实际情况设置验证方式。
vim /etc/ssh/sshd_config #编辑服务端主配置文件
PasswordAuthentication yes #启用密码验证
PubkeyAuthentication yes #启用密钥对验证
AuthorizedKeysFile .ssh/authorized_keys #指定公钥库文件
![](https://img-blog.csdnimg.cn/img_convert/7ca2bc5aa709183bae0fb17eefc05353.png)
![](https://img-blog.csdnimg.cn/img_convert/41019d3b76837b16a636ce415b509ee9.png)
在客户端创建密钥对
通过ssh-keygen工具为当前用户创建密钥对文件。可用的加密算法为RSA、ECDSA或DSA等(ssh-keygen命令的“-t”选项用于指定算法类型)。
![](https://img-blog.csdnimg.cn/img_convert/91b3a0f19b3ccf8a69aaf495922522df.png)
这里选择密钥路径默认回车
![](https://img-blog.csdnimg.cn/img_convert/248d75f4e87d1385ab250acbf2d0d88b.png)
输入密钥对密码
![](https://img-blog.csdnimg.cn/img_convert/dbc518abf596bd63ac4b4c5449d2efb0.png)
生成公钥和私钥
现在将密钥文件传给test2
![](https://img-blog.csdnimg.cn/img_convert/6ead8bf251cac0105ab36b9fe4567b42.png)
进入test查看.ssh
![](https://img-blog.csdnimg.cn/img_convert/eaad4c02e5ad87e6c4f1c1a7ff9a7f38.png)
![](https://img-blog.csdnimg.cn/img_convert/70eec91e21c4394a24f00ad1210315f8.png)
此时用test1连接test2只要输入密钥对密码即可
免密钥登陆
![](https://img-blog.csdnimg.cn/img_convert/a5064bdf6c7479faf5402dd0b1356729.png)
![](https://img-blog.csdnimg.cn/img_convert/489dead3a6bd3c85f198f2f1d3754a1d.png)
四、TCP Wrappers 访问控制
TCP Wrappers 将TCP服务程序“包裹”起来,
代为监听TCP服务程序的端口,
增加了一个安全检测过程,外来的连接请求必须先通过这层安全检测,
获得许可后才能访问真正的服务程序。
大多数 Linux 发行版,TCP Wrappers 是默认提供的功能。rpm -q tcp_wrappers
1、TCP Wrapper 保护机制的两种实现方式
1.直接使用 tcpd 程序对其他服务程序进行保护,需要运行 tcpd程序。
2.由其他网络服务程序调用 libwrap.so.链接库,
不需要运行 tcpd 程序。此方式的应用更加广泛,也更有效率。
2、使用 ldd 命令可以查看程序的 libwrap.so.*链接库
ldd $(which ssh vsftpd)
TCP Wrappers 的访问策略
TCP Wrappers 机制的保护对象为各种网络服务程序,针对访问服务的客户端地址进行访问控制。
对应的两个策略文件为/etc/hosts.allow 和/etc/hosts.deny,分别用来设置允许和拒绝的策略。
![](https://img-blog.csdnimg.cn/img_convert/19f3600232d8736fea57a310d60efad8.png)
ldd $(which ssh vsftpd)调用库
![](https://img-blog.csdnimg.cn/img_convert/edf39b4b1e51b076e11f8573e73c92d4.png)
![](https://img-blog.csdnimg.cn/img_convert/1e9eb342aa9f55818d827baa08e06e77.png)
![](https://img-blog.csdnimg.cn/img_convert/06ab6dab9c155a118c1d2ada3fdc1506.png)
![](https://img-blog.csdnimg.cn/img_convert/16377c8917c02a71e62784eabe75de6c.png)
只申明了20可以连接
denyALL:ALL