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给定的文件作为一个随机种子
相关推荐
爱学习的小囧16 小时前
VMware ESXi 6.7U3v 新版特性、驱动集成教程和资源包、部署教程及高频问答详情
运维·服务器·虚拟化·esxi6.7·esxi蟹卡驱动
小疙瘩16 小时前
只是记录自己发布若依分离系统到linux过程中遇到的问题
linux·运维·服务器
dldw77717 小时前
IE无法正常登录windows2000server的FTP服务器
运维·服务器·网络
我是伪码农18 小时前
外卖餐具智能推荐
linux·服务器·前端
汤愈韬18 小时前
下一代防火墙通用原理
运维·服务器·网络·security
皮皮林55118 小时前
强烈建议大家使用 Linux 做开发?
linux
IMPYLH18 小时前
Linux 的 od 命令
linux·运维·服务器·bash
Kk.080219 小时前
Linux(十一)fork实例练习、文件操作示例及相关面试题目分享
linux·运维·算法
数据雕塑家20 小时前
Linux下大文件切割与合并实战:解决FAT32文件系统传输限制
linux·运维·服务器
IMPYLH20 小时前
Linux 的 nice 命令
linux·运维·服务器·bash