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给定的文件作为一个随机种子
相关推荐
繁依Fanyi11 分钟前
简易安卓句分器实现
java·服务器·开发语言·算法·eclipse
C-cat.11 分钟前
Linux|环境变量
linux·运维·服务器
yunfanleo26 分钟前
docker run m3e 配置网络,自动重启,GPU等 配置渠道要点
linux·运维·docker
m512726 分钟前
LinuxC语言
java·服务器·前端
运维-大白同学1 小时前
将django+vue项目发布部署到服务器
服务器·vue.js·django
糖豆豆今天也要努力鸭1 小时前
torch.__version__的torch版本和conda list的torch版本不一致
linux·pytorch·python·深度学习·conda·torch
烦躁的大鼻嘎1 小时前
【Linux】深入理解GCC/G++编译流程及库文件管理
linux·运维·服务器
乐大师1 小时前
Deepin登录后提示“解锁登陆密钥环里的密码不匹配”
运维·服务器
ac.char1 小时前
在 Ubuntu 上安装 Yarn 环境
linux·运维·服务器·ubuntu
敲上瘾1 小时前
操作系统的理解
linux·运维·服务器·c++·大模型·操作系统·aigc