百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程文章 > 正文

打开SSH服务工具箱,助升运维效率

qiyuwang 2025-04-08 17:53 4 浏览 0 评论

Secure Shell (SSH) 是一种加密的网络协议,具备加密通信、身份认证(密码或密钥)、远程命令执行、文件传输等功能,默认使用TCP 22 端口进行通信,用于在不安全的网络中安全的进行远程登录和管理服务器。它替代了传统的明文协议(如Telnet、FTP),通过加密和身份验证机制保障数据传输的安全性。

ssh服务支持功能


NO.1 打造安全SSH服务通道

SSH服务作为远程管理的核心工具,尽管设计上具备高安全性,但在实际应用中仍易遭受攻击,主要原因包括以下几个方面:

  • 默认端口暴露
    SSH默认使用
    22端口,攻击者通过全网扫描即可快速定位目标,发起暴力破解或漏洞利用。
  • IP白名单缺失
    允许任意IP连接SSH端口,攻击者可随意发起攻击。
  • Root账户开放
    部分系统默认允许root用户通过SSH登录,直接暴露最高权限账户。
  • 弱密码策略
    用户使用简单密码(如
    123456admin),攻击者可快速破解。
  • 账号防护策略缺失
    用户账号未设置登录失败次数锁定时长限制,增加攻击者爆破成功率
  • 密钥泄露风险
    私钥文件(
    id_rsa)未加密存储或权限宽松(如chmod 777),导致被窃取。
  • 公钥配置错误
    authorized_keys文件权限不当或包含未经验证的公钥。
  • 兼容性配置风险
    为兼容旧客户端启用不安全的加密算法(如SSHv1、CBC模式加密)。
  • 日志监控不足
    未定期检查
    /var/log/auth.log,导致攻击行为未被及时发现。
  • 未及时更新补丁
    旧版OpenSSH存在已知漏洞(如CVE-2020-15778、CVE-2018-15473),攻击者可远程执行代码。

1、更换SSH服务"门牌号"和"大管家"

SSH服务默认使用的是TCP 22 端口进行通信,这个就像SSH服务的“门牌号”,通过修改SSH服务的默认端口号,可以避免自动化脚本的扫描;root用户是系统最高权限用户,是系统的“大管家”,禁用root账号登录,可以降低暴力破解攻击成功率。

  • 更换SSH服务默认端口号
# 修改服务端配置
sudo vim /etc/ssh/sshd_config
修改以下行:
Port 65522  # 改为非标准端口(如 49152-65535 之间的高位端口)

#修改selinux设置,放行新添加的ssh端口
semanage port -a -t ssh_port_t -p tcp 65522

# 重启服务生效:
sudo systemctl restart sshd

# 验证:
ssh user@hostname -p 65522
或者
netstat -anp|grep 65522 

# 建议同时修改/etc/services里面的ssh对应的端口
ssh           65522/tcp            # The Secure Shell (SSH) Protocol
ssh           65522/udp            # The Secure Shell (SSH) Protocol
#使配置生效
source /etc/services
  • 禁用root账户登录
# 修改服务端配置   
sudo vim /etc/ssh/sshd_config
修改以下行:
PermitRootLogin no          # 完全禁止Root登录

# 重启服务生效:
sudo systemctl restart sshd

# 验证:
ssh root@hostname -p 65522

2、安排“门岗”,发放特别“通行证”

SSH服务默认是监听在所有的网口上,针对实际需求,可以调整SSH服务配置,让业务监听在指定的网口上;通过启用防火墙或tcp_wrappers,可以限制访问服务的主机,通过启用PAM服务,对登录ssh服务的账号进行检查加固和控制,针对特殊的场景,配置信任主机免密登录。

sshd_config参数配置

  • 设置SSH服务监听在指定网卡
  • # 修改服务端配置
    sudo vim /etc/ssh/sshd_config
    修改以下行:
    Protocol 2                      #设置协议版本为V2
    ListenAddress 192.168.1.100     #设置只在192.168.1.100地址监听65522端口
    
    # 重启服务生效:
    sudo systemctl restart sshd
    
    # 验证:
    netstat -anp|grep sshd
    • 限制可信主机访问SSH服务
    # 配置firewall防火墙规则允许指定192.168.1.200访问
    firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.200" port protocol="tcp" port="65522" accep"
    # 重新加载让规则生效
    firewall-cmd --reload
    
    # 配置tcp_wrappers规则放通192.168.1.200访问
    ldd /usr/sbin/sshd |grep libwrap  #查看是否支持tcp_warppers
    # 有以下输出则表示支持
    libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fefecf89000)
    #编辑/etc/hosts.allow文件,添加SSH服务允许的地址
    sudo vim /etc/hosts.allow
    添加如下内容:
    sshd : 192.168.1.0
    # 编辑/etc/hosts.deny文件,限制其他所有地址访问SSH
    sudo vim /etc/hosts.deny
    添加如下内容:
    sshd : ALL
    • 使用PAM模块加固账户信息
    #编辑/etc/pam.d/system-auth,设置密码复杂度
    password requisite pam_pwquality.so retry=3 minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1
    
    #编辑/etc/pam.d/sshd,配置登录失败锁定策略
    auth required pam_tally2.so deny=5 unlock_time=600
    • 设置SSH服务免密登录
    • 生成ssh服务秘钥对
    # 使用ssh-keygen生成密钥,生成Ed25519密钥(推荐,更安全且更快)
    ssh-keygen -t ed25519 
    
    # 或生成RSA密钥(兼容旧系统)
    ssh-keygen -t rsa -b 4096 
    • 交互提示:输入密钥保存路径(默认:~/.ssh/id_ed25519)。设置密钥密码(可选,增强安全性)。
    • 生成文件
      • 私钥:~/.ssh/id_ed25519(需严格保密)
      • 公钥:~/.ssh/id_ed25519.pub(可自由分发)

    ed25519加密算法密钥对生成

  • 分发公钥到服务器
  • # 使用 `ssh-copy-id`(推荐),自动将公钥添加到服务器的 ~/.ssh/authorized_keys
    ssh-copy-id -i ~/.ssh/id_ed25519.pub user@hostname -p port
    # 需要输入一次密码(完成后即可免密登录)。
    
    # 手动上传到服务器,复制公钥到pub.txt
    cat ~/.ssh/id_ed25519.pub > pub.txt
    登录服务器,将公钥追加到 `~/.ssh/authorized_keys`:
    mkdir -p ~/.ssh
    cat pub.txt >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys  # 必须限制权限!
    • 密钥权限管理
    # 私钥文件权限必须是 600
    chmod 600 ~/.ssh/id_ed25519
    
    #服务器上的 ~/.ssh 目录权限为 700:
    chmod 700 ~/.ssh
    
    #服务器上的 authorized_keys 文件权限为 600:
    chmod 600 ~/.ssh/authorized_keys

    NO.2 打开SSH服务工具箱

    SSH服务除了远程登录和管理服务器、身份认证、通信加密的基础功能,还具备网络穿透、端口转发文件等功能,一起揭开这个工具箱,寻找趁手的工具。

    • 工具1-本地端口转发

    本地端口转发原理:SSH 客户端在本地打开一个端口,监听来自本地的连接请求。当有数据发送到该端口时,SSH 客户端会通过加密通道将数据转发到远程 SSH 服务器,再由服务器将数据发送到指定的目标地址和端口。

    本地端口转发示例

    # 配置本地端口转发,访问服务器的web服务
    ssh -L 192.168.1.200:8090:192.168.2.200:8090 -Nf testuser@192.168.1.100 -p 65522
    
    #测试验证
    打开本地浏览器,在浏览器输入http://localhost:8090
    • 参数说明
      • -L:开启本地转发
      • 192.168.1.200:8090:在本地所有接口上监听8090端口,端口可自定义
      • 192.168.2.110:8090:真实应用服务器地址和端口
      • -Nf:将命令放在后台静默执行
      • testuser@192.168.1.100:跳板服务地址
      • -p 65522:跳板服务器ssh服务端口
    • 工具2-远程端口转发

    远程端口转发原理:SSH 客户端请求远程 SSH 服务器在指定端口上监听,当有数据到达该端口时,远程服务器将数据通过 SSH 隧道回传给本地客户端,再由客户端转发到本地网络中的目标服务。

    远程端口转发示例

    # 配置远程端口转发,访问部署在本地的Mariadb数据库
    ssh -R 192.168.2.100:13306:192.168.1.200:3306 -Nf testuser@192.168.1.100 -p 65522
    • 参数说明
      • -R:开启远程转发
      • 192.168.2.100:13306:在跳板服务器上开放13306端口接收数据
      • 192.168.1.100:3306:本地数据库服务地址端口
      • -Nf:将命令放在后台静默执行
      • testuser@192.168.1.100:跳板服务地址
      • -p 65522:跳板服务器ssh服务端口
    • 工具3-scp安全复制工具

    SCP(Secure Copy)是基于 SSH 协议的安全文件传输工具,用于在本地与远程主机之间加密传输文件或目录,仅支持上传和下载功能。

    SCP 本质是 SSH 的一个子系统,依赖 SSH 提供以下功能:

    身份认证:通过密码或密钥验证用户身份。

    加密通道:使用 AES、ChaCha20 等算法加密传输数据。

    完整性校验:防止数据在传输中被篡改

    • SCP 的工作流程
    • 建立 SSH 连接 客户端与远程服务器建立 SSH 连接,完成身份认证和加密通道协商。
    • 密钥交换:使用 Diffie-Hellman 算法生成临时会话密钥。
    • 加密算法协商:如客户端与服务器约定使用 AES-256-GCM 加密数据。
    • 启动远程 SCP 进程
    • 上传文件:客户端通过 SSH 在远程服务器启动 scp -t /目标路径(-t 表示接收文件)。
    • 下载文件:客户端通过 SSH 在远程服务器启动 scp -f /源文件(-f 表示发送文件)。
    • 传输元数据 文件属性:
    • 传输前发送文件权限、大小、时间戳等元数据。
    • 目录处理:
    • 若传输目录,递归发送每个文件的元数据和内容。
    • 分块传输文件内容 数据分块:
    • 文件内容被分块(通常为 32KB 或 64KB)并通过 SSH 加密通道传输。
    • 确认机制:每传输一个数据块,接收方返回确认信号(\0)。
    • 结束传输 发送结束标记(如 E),关闭连接。
    • scp命令使用示例
    # 命令格式
    scp [选项] 源文件 目标文件
    
    # 复制本地文件到远程主机
    scp file.txt user@remote:/path/
    
    # 复制远程文件到本地
    scp user@remote:/path/file.txt .
    
    # 复制远程目录到本地
    scp -r user@remote:/path/ /local/path
    • 参数说明:
      • -r:递归复制整个目录(必选)
      • -P 端口:指定 SSH 端口(默认 22)
      • -C:启用压缩传输(大文件推荐)
      • -p:保留文件权限、修改时间等属性
      • -v:显示详细传输日志(调试用)
      • -q:静默模式(不显示进度)
    • 工具4-sftp安全文件传输协议

    SFTP(SSH File Transfer Protocol)是一种通过SSH(Secure Shell)协议进行安全文件传输的网络协议。它在传输过程中对数据进行加密,确保了文件传输的安全性和完整性。SFTP不仅支持文件的上传和下载,还提供了文件删除、重命名、创建目录等丰富的文件管理功能。

    • sftp工作原理
    • 底层依赖 SSH 协议:
    • SFTP 是 SSH 的一个子系统(类似 SCP),默认使用 SSH 的 22 端口。
    • 会话流程:
    • 客户端与服务器建立 SSH 连接。
    • 启动 SFTP 子系统(通过 sftp-server 或类似服务)。
    • 通过加密通道传输文件操作指令和数据。
    • 协议分层
    • SSH 传输层:处理加密、认证和完整性校验。
    • SFTP 协议层:定义文件操作指令(如 OPEN, READ, WRITE)和响应。
    • 数据传输
    • 分块传输:文件被分块传输,每个块通过 SSH 加密。
    • 二进制协议:SFTP 使用二进制格式,扩展性更强。
    • sftp使用方法
    # sftp命令格式
    sftp user@192.168.1.100 -p65522
    sftp> cd /tmp
    sftp> put test.txt
    sftp> chmod 644 test.txt
    sftp> bye
    • sftp指令:
    • put local_file:上传本地文件到远程
    • get remote_file:下载远程文件到本地
    • ls:列出远程目录内容lls:列出本地目录内容
    • cd remote_dir:切换远程目录
    • lcd local_dir:切换本地目录
    • mkdir dir:在远程创建目录
    • rm file:删除远程文件
    • rename old new:重命名远程文件
    • chmod 644 file:修改远程文件权限
    • exit / bye:退出 SFTP 会话

    SSH服务是IT基础设施中不可或缺的安全工具,掌握其关键配置与高级功能可显著提升运维效率和系统安全性。

    相关推荐

    # 安装打开 ubuntu-22.04.3-LTS 报错 解决方案

    #安装打开ubuntu-22.04.3-LTS报错解决方案WslRegisterDistributionfailedwitherror:0x800701bcError:0x80070...

    利用阿里云镜像在ubuntu上安装Docker

    简介:...

    如何将Ubuntu Kylin(优麒麟)19.10系统升级到20.04版本

    UbuntuKylin系统使用一段时间后,有新的版本发布,如何将现有的UbuntuKylin系统升级到最新版本?可以通过下面的方法进行升级。1.先查看相关的UbuntuKylin系统版本情况。使...

    Ubuntu 16.10内部代号确认为Yakkety Yak

    在正式宣布Ubuntu16.04LTS(XenialXerus)的当天,Canonical创始人MarkShuttleworth还非常开心的在个人微博上宣布Ubuntu下个版本16.10的内...

    如何在win11的wsl上装ubuntu(怎么在windows上安装ubuntu)

    在Windows11的WSL(WindowsSubsystemforLinux)上安装Ubuntu非常简单。以下是详细的步骤:---...

    Win11学院:如何在Windows 11上使用WSL安装Ubuntu

    IT之家2月18日消息,科技媒体pureinfotech昨日(2月17日)发布博文,介绍了3中简便的方法,让你轻松在Windows11系统中,使用WindowsSubs...

    如何查看Linux的IP地址(如何查看Linux的ip地址)

    本头条号每天坚持更新原创干货技术文章,欢迎关注本头条号"Linux学习教程",公众号名称“Linux入门学习教程"。...

    怎么看电脑系统?(怎么看电脑系统配置)

    要查看电脑的操作系统信息,可以按照以下步骤操作,根据不同的操作系统选择对应的方法:一、Windows系统通过系统属性查看右键点击桌面上的“此电脑”(或“我的电脑”)图标,选择“属性”。在打开的...

    如何查询 Linux 内核版本?这些命令一定要会!

    Linux内核是操作系统的核心,负责管理硬件资源、调度进程、处理系统调用等关键任务。不同的内核版本可能支持不同的硬件特性、提供新的功能,或者修复了已知的安全漏洞。以下是查询内核版本的几个常见场景:...

    深度剖析:Linux下查看系统版本与CPU架构

    在Linux系统管理、维护以及软件部署的过程中,精准掌握系统版本和CPU架构是极为关键的基础操作。这些信息不仅有助于我们深入了解系统特性、判断软件兼容性,还能为后续的软件安装、性能优化提供重要依据。接...

    504 错误代码解析与应对策略(504错误咋解决)

    在互联网的使用过程中,用户偶尔会遭遇各种错误提示,其中504错误代码是较为常见的一种。504错误并非意味着网站被屏蔽,它实际上是指服务器在规定时间内未能从上游服务器获取响应,专业术语称为“Ga...

    猎聘APP和官网崩了?回应:正对部分职位整改,临时域名可登录

    10月12日,有网友反映猎聘网无法打开,猎聘APP无法登录。截至10月14日,仍有网友不断向猎聘官方微博下反映该情况,而猎聘官方微博未发布相关情况说明,只是在微博内对反映该情况的用户进行回复,“抱歉,...

    域名解析的原理是什么?域名解析的流程是怎样的?

    域名解析是网站正常运行的关键因素,因此网站管理者了解域名解析的原理和流程对于做好域名管理、解决常见解析问题,保障网站的正常运转十分必要。那么域名解析的原理是什么?域名解析的流程是怎样的?接下来,中科三...

    Linux无法解析域名的解决办法(linux 不能解析域名)

    如果由于误操作,删除了系统原有的dhcp相关设置就无法正常解析域名。  此时,需要手动修改配置文件:  /etc/resolv.conf  将域名解析服务器手动添加到配置文件中  该文件是DNS域名解...

    域名劫持是什么?(域名劫持是什么)

    域名劫持是互联网攻击的一种方式,通过攻击域名解析服务器(DNS),或伪造域名解析服务器(DNS)的方法,把目标网站域名解析到错误的地址从而实现用户无法访问目标网站的目的。说的直白些,域名劫持,就是把互...

    取消回复欢迎 发表评论: