目录
一、SSH远程管理
1)SSH的简介
2)SSH的优点
3)常用的SSH软件的介绍
4)SSH 的组成
5)SSH的密钥登录
密钥登录的过程:
二、SSH的运用
1 )SSH配置文件信息
2)存放ssh服务端的配置文件
3)存放ssh客户端的配置文件
4)ssh在Linux中的密码登录
4)利用ssh协议传输文件和获取文件
5)scp传输文件
6)scp获取服务端的文件
7)sftp远程访问操作
三、ssh密钥登录操作
实验目的
实验准备
实验设计图
编辑
实验验证
实验步骤
第一步:在客户端中创建密钥
第二步:把公钥文件导入到ssh服务端
方式1:手动导公钥进服务器
方式2:自动导公钥入服务器
第三步:进行测试
测试一:客户端zhangsan访问服务端root
测试二:客户端root访问服务端root
测试三:客户端zhangsan 访问服务端wangwu
四、TCP_wapper的原理和运用
1)TCP_wapper的工作原理
2)TCP_Wrappers的运用
假设引用
白名单设置:
测试
总结
一、SSH远程管理
telnet与ssh区别
telnet 明文 23
ssh 密文 22
检查是否开启开机自启
systemctl is-enabled ssh
1)SSH的简介
SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH 为建立在应用层和传输层基础上的安全协议。对数据进行压缩,加快传输速度
作用:SSHD 服务使用 SSH 协议可以用来进行远程控制,或在计算机之间传送文件
OpenSSH 是实现SSH协议的开源软件项目,适用于各种UNIX、 Linux 操作系统。
Centos 7系统默认已安装openssh相关软件包,并将sshd 服务添加为开机自启动。
执行"systemctl start sshd"命令即可启动sshd 服务
sshd 服务默认使用的是TCP的22端口,安全协议版本sshv2,出来2之外还有1(有漏洞)
OpenSSH
- 服务名称:sshd
- 服务端主程序:/usr/sbin/sshd
- 服务端配置文件:/etc/ssh/sshd_config
- 客户端配置文件:/etc/ssh/ssh_config
2)SSH的优点
SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。S S H最初是U N I X系统上的一个程序,后来又迅速扩展到其他操作平台。S S H在正确使用时可弥补网络中的漏洞。客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序
- 数据传输的过程是加密的,具有安全稳定的特点
- 数据传输的方式是压缩的,可以提高传输速度
3)常用的SSH软件的介绍
SSH客户端:putty(开源工具),xshell,CRT
SSH服务端:openSSH(centos7系统默认安装)
centos7 ssh服务启动自检命令: systemctl is-enabled sshd
4)SSH 的组成
传输层协议 [SSH-TRANS]
提供了服务器认证,保密性及完整性。此外它有时还提供压缩功能。 SSH-TRANS 通常运行在TCP/IP连接上,也可能用于其它可靠数据流上。 SSH-TRANS 提供了强力的加密技术、密码主机认证及完整性保护。该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上
用户认证协议 [SSH-USERAUTH]
用于向服务器提供客户端用户鉴别功能。它运行在传输层协议 SSH-TRANS 上面。当SSH-USERAUTH 开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希H )。会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。 SSH-USERAUTH 也需要知道低层协议是否提供保密性保护
连接协议 [SSH-CONNECT]
将多个加密隧道分成逻辑通道。它运行在用户认证协议上。它提供了交互式登录话路、远程命令执行、转发 TCP/IP 连接和转发 X11 连接
5)SSH的密钥登录
密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥。而ssh密钥就是一种非对称性的密钥
ssh 远程访问控制中不仅仅可以使用用户密码登录,还可以通过 密钥进行登录。而密钥登录的产生是通过客户端与服务端进行一系列的操作过程产生的。
密钥登录的过程:
- ssh客户端通过ssh-keygen生成自己的公钥和私钥,将公钥发送给ssh服务端,并且放在指定的位置。
- 公钥发送完毕后。ssh客户端再向ssh 服务端进行登录请求。
- ssh服务端收到ssh客户端的登录请求后,ssh服务端用对应的公钥加密一些随机数返回给ssh客户端。
- ssh客户端收加密的随机数后使用私钥对其进行解密,再将解密的结果发送给ssh服务端进行验证。
- ssh服务端接收到ssh客户端发送过来的解密数据,将其与原数据进行比对,保持一致则允许用户进行登录
二、SSH的运用
1 )SSH配置文件信息
- sshd服务的配置文件默认位于/etc/ssh/sshd_config,正确调整相关配置项,可以进一步提高sshd远程登录的安全性,下面介绍最常用的一些配置项,关于sshd_config文件的更多配置可参考man手册页
- Port 22 监听的端口(默认22),也可以使用多个Port,即重复使用 Port 这个配置项。
- #例如想要开放sshd端口为 22和222,则添加如下内容
- Port 22
- Port 222
- #然后重新启动sshd这样就好了。 建议大家修改 port number 为其它端口。防止别人暴力破解。
- ListenAddress 0.0.0.0 监听的IP地址(默认监听所有IP)
- 设置sshd服务器绑定的IP地址,0.0.0.0 表示侦听所有地址, 这个值可以写成本地IP地址也可以写成所有地址
- SyslogFacility AUTHPRIV 当有人使用 SSH 登入系统的时候,SSH 会记录信息,这个信息要记录的类型为AUTHPRIV
- sshd服务日志存放在: /var/log/secure
- 为什么sshd配置文件中没有指定日志,但日志却存放在了:/var/log/secure ?
- # vim /etc/rsyslog.conf 查看:
- LogLevel INFO 日志记录的等级!INFO级别以上。
- UseDNS no 禁用dns反向解析,一般来说,为了要判断客户端来源是正常合法的,因此会使用DNS去反查客户端的主机名,不过如果是在内网互连,设定为 no 会让联连接速度比较快
- PermitRootLogin no 禁止ROOT用户远程登录
- PermitEmptyPasswords no 禁止密码为空的用户远程登录
- LoginGraceTime 2m 限制用户登录验证过程的时间(默认为2分钟),即在多久时间内没有成功连上 SSH server 就强迫断线!若无单位则默认时间为秒。可以根据实际情况来修改实际
- MaxAuthTries 6 限制用户登录验证过程的最大重试次数
- DenyUsers zhangsan lisi 拒绝XX用户远程登录系统,其他均允许
- AllowUsers jerry admin@61.23.24.25 允许jerry在任何何IP的主机上远程登录,允许admin只能在主机61.23.24.25登录 ,其他均拒绝(不要同时使用AllowUsers和DenyUsers配置)
- PasswordAuthentication yes 是否启用密码验证
- PubkeyAuthentication yes 是否启用密钥对验证
- AuthorizedKeysFile .ssh/authorized_keys 指定保存各用户公钥内容的数据文件位置,默认保存用户公钥信息的文件位于(服务器某个用户宿主目录下的)
- PrintLastLog yes 显示上次登入的信息,如上次登入的时间、地点等等,默认是yes
- PrintMotd yes 登入后是否显示出一些信息,即打印出 /etc/motd这个文档的内容。
- 例如给sshd服务添加一些警告信息
- 修改/etc/motd
- # cat /etc/motd
- # echo 'Warning ! From now on, all of your operation has been record!'> /etc/motd
- 测试:连接ssh,显示结果
- 配置文件sshd_config修改后,重启sshd服务
- #systemctl restart sshd
2)存放ssh服务端的配置文件
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反向解析,提高服务器的响应速度
3)存放ssh客户端的配置文件
/etc/ssh/ssh_config (该配置基本默认保持不变,就可以了)
4)ssh在Linux中的密码登录
ssh [远程主机用户名]@[远程服务器主机名或IP地址] [-p port]
[root@localhost7 ~]# ssh 192.168.73.110
exit 退出当前用户
[root@localhost7 ~]# ssh -p 22 zhangsan@192.168.73.110
4)利用ssh协议传输文件和获取文件
ssh scp sftp 都是默认使用ssh协议,端口为 tcp 22
5)scp传输文件
scp [-r 目录] 文件 [用户]@服务端IP:保存路径(如果端口号修改过,就用-P进行指定)
[root@localhost6 opt]# scp shiyan.zip root@192.168.73.111:/opt
6)scp获取服务端的文件
scp [-P] [用户]@服务端IP:保存路径 本地路径
[root@localhost6 opt]# scp root@192.168.73.111:/opt/shiyan.zip /opt
7)sftp远程访问操作
sftp [-P] 用户@服务端IP (当默认端口改变时,可以用-P指定)
[root@localhost6 opt]# sftp root@192.168.73.111
三、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
四、TCP_wapper的原理和运用
1)TCP_wapper的工作原理
TCP_Wrappers有一个TCP的守护进程叫作tcpd。以ssh为例,每当有ssh的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件,符合要求,则会把这次连接原封不动的转给真正的ssh进程,由ssh完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供ssh服务
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服务程序,如果也没有匹配上则默认允许放通
总结
ssh 密钥对配置
客户端 ssh的发起端:ssh-keygen -t rsa/ecdsa 创建密钥对,在自己家目录的.ssh目录中生成 私钥和公钥文件(XXX.pub)
ssh-copy-id -i 公钥文件 目标主机用户@目标主机IP/主机名
服务端 被ssh连接端 在指定用户家目录的.ssh目录中生成公钥认证文件 authorized_keys
从此客户端 ssh [-p 端口] 用户@IP 使用密钥对的密码验证
1. 熟知ssh密钥生成的过程,用于对ssh访问的加密,符合更安全的远程控制标准
2.当我们获得一台新的服务器时,为了更安全,取消掉root用户的远程访问
3.ssh中有更高效的传输获取功能,可以加以利用。
4.TCP_Wrappers中的黑白名单,可以大量高效的设置可访问服务端的用户及其能够访问的服务