day10:ssh服务-跳板机

一,ssh服务概述

ssh服务概述

ssh(Secure Shell)是一种用于在不安全网络中进行安全登录、远程执行命令及传输文件的网络协议。它通过加密技术来保证通信的保密性和完整性,主要用于替代不安全的telnetrloginrsh等协议。ssh通常在22端口监听连接请求,可以通过防火墙及访问控制列表来增强其安全性。

sshd服务

sshd(Secure Shell Daemon)是ssh协议的服务端守护进程,负责响应客户端发起的连接请求。sshd服务通过密钥认证、密码认证、基于PAM(Pluggable Authentication Module)认证等方式进行用户身份验证。

sshd服务的主要功能
  1. 身份认证:支持多种认证方式,包括密码认证、密钥认证和双因素认证等。
  2. 数据加密:通过对称加密和非对称加密相结合的方式对传输的数据进行加密,确保通信过程的机密性。
  3. 完整性验证:通过哈希算法确保数据在传输过程中未被篡改。
  4. 隧道功能:支持TCP端口转发(隧道)功能,允许在不安全的网络上创建加密通道。
  5. 文件传输:支持使用scpsftp进行文件的安全传输。
sshd配置文件

sshd的配置文件通常位于 /etc/ssh/sshd_config。其中包含了服务端的监听端口、允许的认证方式、连接超时设置等配置选项。

二,加密算法

对称加密

对称加密是一种加密和解密都使用相同密钥的加密方法。加密和解密的过程是对称的,密钥的保密性至关重要,因为同一个密钥可以加密和解密数据。

特点
  • 加密速度快:适合对大量数据进行快速加密和解密。
  • 需要共享密钥:加密和解密使用相同的密钥,因此需要安全地共享密钥。
  • 应用场景:常用于需要快速处理大量数据的场景,如文件加密、数据库加密等。
常见算法
  • DES(Data Encryption Standard)
  • AES(Advanced Encryption Standard)
  • 3DES(Triple DES)
优缺点
  • 优点:速度快、效率高,适合处理大规模数据。
  • 缺点:密钥管理困难,密钥泄露会导致数据被轻易解密。

非对称加密

非对称加密使用一对密钥:公钥私钥。公钥用于加密,私钥用于解密。这意味着公钥可以公开,而私钥必须严格保密。加密和解密过程是不对称的,这种加密方式更安全,但加密速度较慢。

特点
  • 更高的安全性:即使公钥泄露,只有持有私钥的用户才能解密数据。
  • 不需要共享私钥:公钥可以公开分发,避免了密钥传输的风险。
  • 应用场景:主要用于身份验证、密钥交换以及需要高安全性的场景,如SSL/TLS、数字签名等。
常见算法
  • RSA(Rivest-Shamir-Adleman)
  • DSA(Digital Signature Algorithm)
  • ECC(Elliptic Curve Cryptography)
优缺点
  • 优点:密钥管理较为简单,公钥公开不会影响安全性,适用于安全性要求高的应用。
  • 缺点:计算速度相对较慢,不适合大数据量的加密。

彩虹表

彩虹表是一种利用预计算哈希链来高效破解哈希值的工具。其原理是通过将大量明文的哈希值计算成“哈希链”,并记录链的起点和终点,极大地减少存储量;在破解时,通过匹配目标哈希值和终点来找到对应的链,然后从起点顺次生成直到匹配目标哈希。彩虹表攻击速度极快,但仅适用于无盐哈希(即无额外随机数据干扰)。因此,为抵御彩虹表攻击,推荐在密码存储中加盐多轮哈希,以使预计算的彩虹表无法复用。

三,ssh服务搭建与连接

搭建ssh服务器

安装 SSH 服务:yum install -y openssh-server(因为openssh是开源免费的)

启动和检查服务

  • sudo systemctl start sshd # 启动SSH服务
  • sudo systemctl enable sshd # 设置开机启动
  • sudo systemctl status sshd # 检查服务状态

查看 SSH 端口(服务器):通常默认端口为22,可以在 /etc/ssh/sshd_config 文件中修改端口号。

使用工具连接

  • PuTTY(Windows):输入服务器 IP、端口和用户名后即可连接。
  • Xshell(Windows):类似 PuTTY,支持更多选项。
  • VS Code(Windows/Mac/Linux):可以通过扩展“Remote - SSH”插件来连接远程服务器,进行开发。

连接时需要提供 用户名IP 地址端口号(如非默认)及 密码密钥

通过linux命令连接

在 Linux 或windows, MacOS 中,可以直接在终端使用 ssh 命令连接远程服务器:

ssh 用户名@服务器IP地址 -p 端口号

如果使用密钥认证,可以指定私钥文件路径:

ssh -i /path/to/private_key 用户名@服务器IP地址

ssh配置文件的配置

SSH 配置文件可以细化连接的安全性、认证方法等。主要配置文件位于 /etc/ssh/sshd_config

#######################################
# 1. 基础设置
#######################################

# 设置 SSH 服务的监听端口,默认为 22。可根据需求更改以增强安全性。
Port 22

# 仅在特定 IP 地址上监听 SSH 服务。可以设置为多个地址(多次使用)。
# 例如:只在 192.168.1.100 上监听 SSH。
# 意思是当服务器有多个ip的时候,客户机只能通过规定ip才可以登录服务器
ListenAddress 192.168.1.100
ListenAddress 192.168.2.100
# 如果想让 SSH 在所有接口上监听,可以使用
# ListenAddress 0.0.0.0

# 禁用反向 DNS 查询,以提高连接速度。
UseDNS no

#######################################
# 2. 登录与认证设置
#######################################

# 禁止 root 用户直接登录,建议出于安全考虑。
PermitRootLogin no

# 限制登录尝试的最大次数,以防止暴力破解攻击。
MaxAuthTries 3

# 禁用空密码登录,以确保账户安全。
PermitEmptyPasswords no

# 允许的用户列表,仅允许 user1 和 user2 登录。
AllowUsers user1 user2

# 禁止的用户列表,不允许 user3 和 user4 登录。
DenyUsers user3 user4

# 允许的用户组,允许 sshusers 和 admins 组的成员登录。
AllowGroups sshusers admins

# 禁止的用户组,不允许 group1 和 group2 组的成员登录。
DenyGroups group1 group2

# 设置用户登录的最大等待时间(秒),超过此时间将自动断开连接。
LoginGraceTime 60

#######################################
# 3. IP 地址限制
#######################################

# 仅允许特定 IP 地址范围的用户连接,提升安全性。
# 需要在防火墙中配置允许的规则。
# 例如:允许 192.168.1.0/24 网段访问
# sudo iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT
# sudo iptables -A INPUT -p tcp --dport 22 -j DROP

#######################################
# 4. 会话与连接控制
#######################################

# 保持客户端连接,防止因长时间未操作而断开连接。
TCPKeepAlive yes

# 服务端向客户端发送保活消息的时间间隔(秒),未响应的最大次数。
ClientAliveInterval 120
ClientAliveCountMax 3

# 限制每个会话允许的最大并发连接数。
MaxSessions 2

#######################################
# 5. 网络转发与隧道配置
#######################################

# 启用或禁用 SSH 隧道功能,通常用于 VPN 连接等场景。
PermitTunnel yes

# 是否允许 X11 窗口转发,关闭可提高安全性。
X11Forwarding no

# 是否允许 TCP 转发,通常用于端口转发和代理服务,建议关闭以提升安全性。
AllowTcpForwarding no

# 将用户限制在指定目录内,适用于 SFTP 和安全性需求较高的环境。
ChrootDirectory /home/sftp-jail

#######################################
# 6. 加密与认证算法设置
#######################################

# 指定允许的加密算法,确保使用强加密方式,去除不安全的旧算法。
Ciphers aes256-ctr,aes192-ctr,aes128-ctr

# 指定允许的消息认证码算法,用于数据完整性和防篡改。
MACs hmac-sha2-256,hmac-sha2-512

# 指定密钥交换算法,移除不安全的算法如 diffie-hellman-group1-sha1。
KexAlgorithms diffie-hellman-group14-sha256,curve25519-sha256

# 指定服务器的主机密钥文件路径,提升身份验证的安全性。
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key

#######################################
# 7. 日志记录与调试
#######################################

# 设置 SSH 日志级别,可以使用 INFO、VERBOSE、DEBUG 等等级。
LogLevel VERBOSE

# 指定日志的目标(如 AUTH 或 AUTHPRIV),用于日志集中管理。
SyslogFacility AUTHPRIV

配置文件修改后,重启 sshd 服务使配置生效:

ssh服务扩展

scp命令:用linux之间的文件传输

scp 【选项】[源文件或目录] [目标地址]

  • -r:递归复制整个目录。
  • -P:指定远程主机的端口(注意是大写的 P)。
  • -i:指定用于身份验证的私钥文件。
  • -v:启用详细模式,输出详细的执行信息,便于调试。
  • 涉及的远程的地址:远程用户名@远程ip:文件路径

可以知道,上传和下载就是将远程目录放在[源文件或目录]还是 [目标地址]的位置而已

剔除用户:

使用w,可以查看当前系统正在登录的终端有哪些

pkill -kill -t 【w中的TTY行名字】

四,跳板机服务搭建

概述

跳板机通常用于管理访问权限,以确保只有经过授权的用户能够访问内部网络中的关键系统。通过使用跳板机,用户的所有访问流量都会通过这个中间服务器,从而实现更好的安全性和审计能力。

免密登录

免密登录:我每次都要从客户机登录服务器,输入密码,现在我不想输入密码了

步骤操作操作方
1. 生成 SSH 密钥对在客户机上运行: ssh-keygen客户机
按 Enter 接受默认设置。客户机
2. 将公钥复制到目标服务器使用以下命令(替换 username192.168.1.100):客户机
ssh-copy-id username@192.168.1.100客户机
输入目标服务器的密码。客户机
3. 测试免密登录尝试通过 SSH 登录到目标服务器:客户机
ssh username@192.168.1.100客户机
检查是否能够免密登录。客户机
4. 权限设置(如有需要)如果遇到问题,确保目标服务器上的权限设置正确:服务器
chmod 700 ~/.ssh服务器
chmod 600 ~/.ssh/authorized_keys服务器
~/表示用户的家目录:本质上命令 ssh-copy-id username@192.168.1.100是将客户机原来的~/.ssh/xx.pub文件内容追加到了服务器的 ~/.ssh/authorized_keys文件

存在的问题与解决方案

  • 安全性

    • 问题:如果跳板机被攻破,攻击者可能会访问内部网络。
    • 解决方案:确保跳板机定期更新,并启用强密码或密钥认证。
  • 访问控制

    • 问题:可能需要管理多个用户的访问权限。
    • 解决方案:使用基于角色的访问控制(RBAC)或结合 LDAP 进行用户管理。
  • 监控与审计

    • 问题:需要监控跳板机上的活动以检测异常行为。
    • 解决方案:使用日志管理工具,如 ELK Stack,来集中管理和分析日志。
  • 性能

    • 问题:跳板机可能成为瓶颈,影响访问速度。
    • 解决方案:根据需要进行负载均衡和优化。
  • 用户体验

    • 问题:用户需要多次登录,增加了复杂性。
    • 解决方案:可以考虑使用 ProxyJump 选项来简化连接流程。

五,综合实验

六,扩展内容

pwgen 是一个用于生成随机密码的命令行工具。它可以创建指定长度、强度和数量的随机密码,方便生成复杂且安全的密码。

pwgen [选项] [长度] [数量]

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo(更新一下)

  • 长度:生成的每个密码的字符长度(默认为 8)。
  • 数量:要生成的密码数量(默认为 1)。
  • 常用选项

    选项描述
    -s生成强密码,使用随机字符(默认为字母和数字)
    -y生成的密码包含特殊字符(如 !@#$%^&*()
    -B生成不包含模棱两可的字符(如 0O1l
    -1生成单个密码,而不是一组
    -h显示帮助信息
    -v显示版本信息
    -n仅生成数字密码
    -r生成可读性强的密码,避免复杂字符组合
    -c生成带有大写字母的密码
    -H使用shal hash给定的文件作为一个随机种子

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/901569.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机视觉-边缘检测实验报告

实验一 边缘检测实验 一、实验目的 1.理解并掌握 Sobel 算子和 Canny 算子的基本原理和应用。 2.学习如何在图像处理中使用这两种算子进行边缘检测。 3.比较 Sobel 算子和 Canny 算子的性能,了解各自的优缺点。 4&#xff0…

【mysql进阶】4-3. 页结构

页面结构 ⻚在MySQL运⾏的过程中起到了⾮常重要的作⽤,为了能发挥更好的性能,可以结合⾃⼰系统的业务场景和数据⼤⼩,对⻚相关的系统变量进⾏调整,⻚的⼤⼩就是⼀个⾮常重要的调整项。同时关于⻚的结构也要有所了解,以…

HTTP协议讲解

前瞻: 认识URL 1.ipport 2.平时上网,就是进程间通信 3.上网行为,1.获取资源 2.上传数据 相当于I/O 4.http协议采用tcp协议 网页 图片 音乐其实都是资源 Http请求 http request Method:Get/Post资源/路径&#xff1a…

MyBatis缓存详解(一级缓存、二级缓存、缓存查询顺序)

固态硬盘缺陷:无法长时间使用,而磁盘只要不消磁,只要不受到磁影响,就可以长期使用,因此绝大多数企业还是使用磁盘来存储数据 像mysql这种关系型数据库中的数据存储在磁盘中,为方便查询,减少系统…

Linux文件类型和根目录结构

Linux文件类型和根目录结构 1.文件类型 字符文件类型说明~普通文件类似于Windows的记事本d目录文件类似于windows文件夹c字符设备文件串行端口设备,顺序读写,键盘b块设备文件可供存储的接口设备,随机读写,硬盘p管道文件用于进程…

工程项目管理软件怎么选?推荐7款实用工具

本文提及的有主流7款工程项目管理系统软件有: 1. Worktile;2. 广联达BIM5D;3. 泛普软件;4. 明源云工程;5. 飞书;6. Smartsheet;7. Procore。 很多工程项目管理人员常常头疼如何有效地管理多个项目&#xff…

保研考研机试攻略:python笔记(1)

🐨🐨🐨宝子们好呀 ~ 我来更新欠大家的python笔记了,从这一篇开始我们来学下python,当然,如果只是想应对机试并且应试语言以C和C为主,那么大家对python了解一点就好,重点可以看高分篇…

【机器学习】——numpy教程

文章目录 1.numpy简介2.初始化numpy3.ndarry的使用3.1numpy的属性3.2numpy的形状3.3ndarray的类型 4numpy生成数组的方法4.1生成0和1数组4.2从现有的数组生成4.3生成固定范围的数组4.4生成随机数组 5.数组的索引、切片6.数组的形状修改7.数组的类型修改8.数组的去重9.ndarray的…

接口测试(七)jmeter——参数化(RandomString函数)

一、RandomString函数 需求:模拟10个用户注册 1. 【工具】–>【函数助手对话框】 2. 选择RandomString函数 假设手机号码前3位设置为固定数值136,后8位可用RandomString函数随机产生数值 ① Random string length:8(随机长度…

记录element-ui改造select显示为table,并支持多查询条件

最近遇到的一个需求 , 很有趣,是需要一个select组件,要求显示工号,员工姓名,以及区域 三个字段,并且要支持三个字段的查询。显然element原生的组件不适用,这时候我们需要改造一下,把…

基于大数据 Python Vue 美食推荐可视化系统(源码+LW+部署讲解+数据库)

!!!!!!!!! 会持续一直更新下去 有问必答 一键收藏关注不迷路 源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwdjf1d 提取码: jf1d &#…

Java后端面试题:Java基础篇

目录 Java基础 1.请你说说Java中基本数据类型的bit长度? 2.switch支持哪些数据类型?支持long么? 3.讲一下常见编码方式? 4.char能不能存储中文? 5.为什么数组索引从0开始呢?假如从1开始不行吗&#xf…

w003基于Springboot的图书个性化推荐系统的设计与实现

🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…

Git 课程任务

破冰和创建项目 https://github.com/WangXiuhao/loveailab

CORE 安全与身份认证《1》 UseRouting 、UseEndpoints

认证、授权、确权与鉴权 路由 web的请求到达后端服务时,controller(控制器)会处理传入的http请求并响应用户操作, 请求的url会被映射到控制器的操作方法上。 此映射过程由应用程序中定义的路由规则完成。 》》》net core 在中间件中的鉴权授权的位置一…

rtp协议:rtcp包格式和传输间隔

RTP Control Protocol -- RTCP-rtp控制协议 实时传输控制协议(RTCP)基于对会话中的所有参与者定期传输控制包,使用与数据包相同的分发机制。底层协议必须提供数据包和控制包的多路复用,例如使用UDP时使用不同的端口号。RTCP执行四…

Golang | Leetcode Golang题解之第501题二叉搜索树中的众数

题目: 题解: func findMode(root *TreeNode) (answer []int) {var base, count, maxCount intupdate : func(x int) {if x base {count} else {base, count x, 1}if count maxCount {answer append(answer, base)} else if count > maxCount {ma…

一站式学习 Shell 脚本语法与编程技巧,踏出自动化的第一步

文章目录 1. 初识 Shell 解释器1.1 Shell 类型1.2 Shell 的父子关系 2. 编写第一个 Shell 脚本3. Shell 脚本语法3.1 脚本格式3.2 注释3.2.1 单行注释3.2.2 多行注释 3.3 Shell 变量3.3.1 系统预定义变量(环境变量)printenv 查看所有环境变量set 查看所有…

RK3568平台(基础篇)预编译命令原理

一.宏定义(#define)是什么 #define 可以将一对文本进行替换,在编译器读到需要被替换的文本的时候,会将这些文本全部替换成我们给定的文本。 如下是一个宏的定义: #define A 100 二.预编译 预处理命令 #if、#endif、#undef、#ifdef、#else、#elif 在接触#if、#undef这…

图片尺寸怎样能快速修改?图片改尺寸的4款在线工具

图片怎么压缩调整大小呢?现在的图片随着质量或者尺寸都会比较大,在很多平台上传时会导致无法使用,需要按照要求调整图片大小后才能够正常使用,那么如何操作能够快速修改图片大小呢?下面来给大家分享图片改大小的4款在线…