SSH 解析 | 关键参数 | 安全配置

介绍

SSH(Secure Shell)是一种用于在计算机网络上进行安全远程访问和执行命令的协议。提供加密通信通道,防止敏感信息在传输过程中被窃听或篡改。SSH还支持文件传输和端口转发等功能,使其成为广泛使用的安全远程管理工具。
image.png
1. 安全远程访问
SSH 允许用户通过网络安全地远程登录到其他计算机。用户可以在远程系统上执行命令、访问文件、管理服务等。

2. 加密通信:
SSH 传输的数据都经过加密,使用的加密算法通常包括对称加密(如AES)和非对称加密(如RSA)。

3. 多种身份验证方法:
SSH 支持多种身份验证方法,包括密码、公钥、证书等。可以选择最适合其需求的身份验证方式,并提高系统的安全性。

4. 文件传输:
SSH 支持安全的文件传输协议(SFTP),允许用户在本地计算机和远程计算机之间传输文件。用于FTP等传统文件传输协议,是FTP安全衍生品,。

5. 端口转发:
SSH 允许用户设置本地端口转发。

6. 配置文件:
SSH 服务器和客户端都有配置文件,用于定制各种参数和行为。可以根据需求进行精确的配置。

7. 公钥和私钥:
SSH 使用公钥加密技术,其中有一个私钥保存在本地,而公钥存储在远程服务器上。允许身份验证,同时不需要在网络上传输密码。

8. 端口号:
SSH 默认使用22号端口,可以通过配置更改。提高系统的安全性,因为恶意用户扫描的是标准端口。

9. 兼容性:
SSH 是一个开放标准,并得到广泛采用。主流操作系统和网络设备都支持 SSH,使其成为跨平台远程访问的标准。

SSH 是一种关键的网络协议,用于保护远程通信和管理。安全性、灵活性和广泛支持使其成为网络管理员和开发人员的首选工具。
image.png

配置

SSH 配置时,涉及到在计算机上设置 SSH 密钥,以便通过SSH协议安全访问其他计算机。

基本的SSH配置步骤:

步骤1:检查 SSH 安装信息

首先,计算机上已经安装了SSH客户端。在大多数操作系统上,SSH 已经默认安装。
检查 SSH 版本信息:

ssh -V

步骤2:生成SSH密钥

  1. 打开终端(Linux和macOS)

  2. 生成SSH密钥:

    ssh-keygen -t rsa -b 4096 -C "UserName@example.com"
    
    • -t rsa: 指定密钥类型为RSA。
    • -b 4096: 指定密钥位数为4096位。
    • -C "UserName@example.com"

    执行命令后,将被要求指定保存密钥的文件位置和设置一个密码(可选)。按照提示操作即可。

步骤3:添加 SSH 密钥到 SSH 代理(可选)

如果希望在一个SSH会话中使用密钥,可以将密钥添加到SSH代理。运行以下命令:

ssh-add ~/.ssh/id_rsa

步骤4:将 SSH 密钥添加到远程服务器

  1. 运行以下命令将 SSH 公钥添加到远程服务器上的authorized_keys文件:

    ssh-copy-id username@remote_host
    

    或者,如果您的系统不支持ssh-copy-id,可以手动将公钥内容追加到远程服务器的~/.ssh/authorized_keys 文件中。

步骤5:测试SSH连接

ssh username@remote_host

设置正确,通过SSH连接到远程服务器无需输入密码。

在很多系统上,允许 Root 用户通过 SSH 连接是不推荐的,因为会增加系统的安全风险。推荐的做法是使用普通用户登录,然后通过sudo或su切换到Root用户权限进行必要的管理任务。

Root 连接

步骤1:打开SSH配置文件

使用文本编辑器打开 SSH 服务器的配置文件。/etc/ssh/sshd_config

sudo nano /etc/ssh/sshd_config

步骤2:修改配置文件

在配置文件中找到以下行:

PermitRootLogin prohibit-password

将其改为:

PermitRootLogin yes

允许 Root 用户通过 SSH 连接。

步骤3:保存并退出

保存文件并退出文本编辑器。

步骤4:重启SSH服务

在Ubuntu上,可以运行:

sudo service ssh restart

在 RHEL/CentOS 系统上,可使用systemctl或其他服务管理工具。

sudo systemctl restart ssh

注意:

  • 在允许Root用户SSH登录之前,已经设置强密码。
  • 确保只有受信任的用户可以通过SSH连接到服务器。

SSH 配置项

常见的SSH配置项的解释:

  1. Port 指定 SSH 服务器监听的端口。默认是22。可以更改以提高安全性。

    Port 2222
    
  2. Protocol SSH 使用的协议版本。一般是2。如果指定"2,1",则服务器将首先尝试使用SSH协议版本2,如果失败,则回退到版本1。

    Protocol 2
    
  3. PermitRootLogin 是否允许 Root 用户通过SSH登录。建议设置为prohibit-password(默认)或without-password以使用密钥身份验证。

    PermitRootLogin prohibit-password
    
  4. PasswordAuthentication 是否允许使用密码进行身份验证。建议设置为no并使用密钥身份验证。

    PasswordAuthentication no
    
  5. AllowUsers / AllowGroups 允许连接的用户或用户组。只有配置的用户或用户组才能通过SSH连接到服务器。

    AllowUsers alice bob
    
  6. DenyUsers / DenyGroups 禁止连接的用户或用户组。配置的用户或用户组将无法通过SSH连接到服务器。

    DenyUsers mallory
    
  7. PubkeyAuthentication 是否启用公钥身份验证。默认为yes

    PubkeyAuthentication yes
    
  8. ChallengeResponseAuthentication 是否启用响应身份验证。默认为yes

    ChallengeResponseAuthentication no
    
  9. UsePAM 是否使用Pluggable Authentication Modules(PAM)进行身份验证。默认设置为yes

    UsePAM yes
    
  10. X11Forwarding 是否允许X11转发。如果不需要图形界面,则设置为no

    X11Forwarding no
    
  11. MaxAuthTries 参数定义尝试进行身份验证的最大次数。如果达到此次数之后仍未成功登录,连接将被断开。默认值通常是6。

MaxAuthTries 3

在上面的配置中,最多允许3次身份验证尝试。超过这个次数后,将禁止进一步尝试。在SSH配置中,可以通过设置登录失败次数参数来增加安全性,以限制暴力破解尝试。

  1. LoginGraceTime 参数定义从用户连接建立到完成身份验证的时间。在时间内,用户需要成功完成身份验证,否则连接将被断开。默认值通常是120秒(2分钟)。
LoginGraceTime 60

在上面配置中,用户需要在60秒内成功完成身份验证,否则连接将被断开。

以上是一些常见的SSH配置项,可以根据需要进行修改。

测试演示

以下是我测试服务器 OpenSSH 配置文件(sshd_config)的示例,因为没有外网连接且为本地私网测试配置相对宽松,其中一些配置项如下:
image.png

  1. PermitRootLogin 是否允许Root用户通过SSH登录。在配置中,设置为yes 允许 Root 登录。

  2. PasswordAuthentication 是否允许使用密码进行身份验证。在配置中,设置为yes,允许密码身份验证。可以将其设置为no以强制使用密钥身份验证。

  3. ChallengeResponseAuthentication 是否启用响应身份验证。在配置中,设置为no

  4. UsePAM 是否启用Pluggable Authentication Modules(PAM)进行身份验证。在配置中,设置为yes

  5. GSSAPIAuthentication 是否启用GSSAPI身份验证。在配置中,设置为yes

  6. X11Forwarding 是否允许X11转发。在配置中,设置为yes

  7. PrintMotd 是否显示/etc/motd文件的消息。在配置中,设置为no表示不显示/etc/motd消息。

  8. Subsystem 指定在连接时启动的子系统。在配置中,sftp子系统指定用于SFTP的路径。

这些都是配置文件中一些常见选项的示例。

风险

尽管SSH是一个强大的安全协议,但仍然存在一些潜在的风险和攻击手段。

  1. 暴力破解密码: 攻击者尝试通过不断尝试密码进行暴力破解SSH连接。

  2. 中间人攻击: 攻击者尝试在用户和远程服务器之间插入以窃听或篡改传输的数据。SSH 加密通信可以减轻这种风险。

  3. 弱加密算法: 使用弱加密算法使 SSH 连接更易于被攻击。因此,需要使用安全的加密算法。

  4. 密钥管理不当: SSH 密钥导致安全漏洞,密钥安全存储以及及时禁用或更换失效的密钥。

暴力破解手段:

  1. 字典攻击: 攻击者事先准备密码字典尝试登录。防范措施包括使用强密码和设置登录失败的锁定机制。

  2. 暴力破解工具: 攻击者使用专门的暴力破解工具,不断尝试各种组合的用户名和密码。可以使用防暴力破解工具、限制登录尝试次数和设置登录延迟等方式减缓此类攻击。

  3. 中间人攻击: 攻击者尝试通过欺骗用户或篡改DNS等手段,使其连接到恶意服务器。使用 SSH 的公钥身份验证可以减轻中间人攻击的风险。

  4. 僵尸网络攻击: 攻击者利用大规模的僵尸网络(botnet)进行协同暴力破解尝试。监控登录日志和强制访问控制列表(ACL)等方法可以帮助防范这种攻击。

为了提高SSH连接的安全性,建议采取以下一些建议性措施:

  • 使用公钥身份验证,尽量避免使用密码登录。
  • 设置账户锁定机制,限制登录尝试次数。
  • 使用多因素身份验证,提高身份验证的安全性。
  • 定期审查登录日志,及时发现异常活动。
  • 更新SSH软件和操作系统,确保及时应用安全补丁。

综合使用这全措施,以减少SSH连接面临的潜在风险。

Ending


~喜欢的话,请收藏 | 关注(✪ω✪)~
~万一有趣的事还在后头呢,Fight!!(o^-^)~''☆ミ☆ミ~……

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用POI生成word文档的table表格

文章目录 使用POI生成word文档的table表格1. 引入maven依赖2. 生成table的两种方式介绍2.1 生成一行一列的table2.2 生成固定行列的table2.3 table合并列2.4 创建多个table存在的问题 使用POI生成word文档的table表格 1. 引入maven依赖 <dependency><groupId>org.…

“探索C语言操作符的神秘世界:从入门到精通的全方位解析“

各位少年&#xff0c;我是博主那一脸阳光&#xff0c;今天来分享深度解析C语言操作符&#xff0c;C语言操作符能帮我们解决很多逻辑性的问题&#xff0c;减少很多代码量&#xff0c;就好比数学的各种符号&#xff0c;我们现在深度解剖一下他们。 前言 在追求爱情的道路上&…

深入浅出AI落地应用分析:AI视频生成Top 5应用

接下俩会每周集中体验一些通用或者垂直的AI落地应用&#xff0c;主要以一些全球或者国外国内排行较前的产品为研究对象&#xff0c;「AI 产品榜&#xff1a; aicpb.com」以专题的方式在博客进行分享。 一、Loom 二、Runway 产品链接&#xff1a;https://app.runwayml.com/ …

ubuntu 22.04 安装mysql-8.0.34

ubuntu 22.04 安装mysql-8.0.34 1、基础安装配置 更新软件包&#xff1a; sudo apt update查看可用软件包&#xff1a; sudo apt search mysql-server安装最新版本&#xff1a; sudo apt install -y mysql-server或者&#xff0c;安装指定版本&#xff1a; sudo apt inst…

【Python程序开发系列】并发执行协程任务超时的解决方案(案例分析)

一、问题 假如我在利用协程并发执行任务的时候&#xff0c;会出现有些任务特别耗时&#xff0c;从而导致程序运行卡住&#xff0c;我们想跳过这些执行特别耗时的任务&#xff0c;只返回不超时的任务结果该怎么解决&#xff1f; 二、实现过程 2.1 情景 假如我有四个任务需要并…

MySQL--删除数据表(6)

MySQL中删除数据表是非常容易操作的&#xff0c;但是你在进行删除表操作时要非常小心&#xff0c;因为执行删除命令后所有数据都会消失。 语法 以下为删除 MySQL 数据表的通用语法&#xff1a; DROP TABLE table_name ; -- 直接删除表&#xff0c;不检查是否存在 或 DROP…

力(FFT,acwing2313)

题目路径&#xff1a; https://www.acwing.com/problem/content/2315/ 思路&#xff1a;

Python可执行文件的转换

当开发者向普通用户分享程序时&#xff0c;为了方便用户在未安装Python环境的情况 下能够正常运行&#xff0c;需要将开发好的程序进行打包&#xff0c;转换成用户可运行的文件类 型。本节将介绍在Windows和Linux两种系统下&#xff0c;将Python类型的文件转换成可执 行文件的方…

kotlin $ (字符串模版)的使用

$ 在kotlin 中当做字符串模版使用&#xff0c;作用就是在字符串里面识别自己定义的字符 例如打印一个字符 这个时候编译就提示我们使用字符串模版的是个 $ 的作用就是识别字符串里面的i 字数有点少了&#xff0c;在写一个demo private fun String.appendArchive(): String …

云手机与实体手机的对比

在数字化时代&#xff0c;云手机作为一种虚拟手机在云端服务器上运行&#xff0c;与传统的实体手机相比存在诸多差异。让我们深入探讨云手机与实体手机之间的区别&#xff0c;以便更好地了解它们的特点和优势。 外观上的差异 实体手机具有实际的外观和重量&#xff0c;占据一定…

编译安装Nginx和使用五种算法实现Nginx反向代理负载均衡

目录 Ubuntu中安装Nginx 概念介绍 负载均衡 几种负载均衡算法 反向代理 环境规划 配置反向代理 加权负载均衡&#xff08;Weighted Load Balancing&#xff09; 轮询&#xff08;Round Robin&#xff09; IP 哈希&#xff08;IP Hash&#xff09; 最少连接&#xff…

多维时序 | Matlab实现EVO-TCN-Multihead-Attention能量谷算法优化时间卷积网络结合多头注意力机制多变量时间序列预测

多维时序 | Matlab实现EVO-TCN-Multihead-Attention能量谷算法优化时间卷积网络结合多头注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现EVO-TCN-Multihead-Attention能量谷算法优化时间卷积网络结合多头注意力机制多变量时间序列预测效果一览基本介绍程序设计参考资…

Spring5系列学习文章分享---第四篇(JdbcTemplate+概念配置+增删改查数据+批量操作 )

目录 JdbcTemplateJdbcTemplate&#xff08;概念和准备&#xff09;JdbcTemplate 操作数据库&#xff08;新增update&#xff09;JdbcTemplate 操作数据库&#xff08;修改和删除update&#xff09;JdbcTemplate 操作数据库&#xff08;查询返回某个值queryForObject&#xff0…

shopee的AI学习之路——GPTs通过AdInteli 广告变现

GPTs|AdInteli 广告变现 一、什么是 AdInteli AdIntelli 是一个旨在为生成 GPTs 接入广告并实现变现的平台。它连接了全球最大的广告联盟&#xff0c;允许广告商进行竞价&#xff0c;确保展示最有价值的广告。AdIntelli 采用 AI 驱动的收入生成技术&#xff0c;优化广告选择。…

《游戏-03_3D-开发》之—新输入系统人物移动攻击连击

本次修改unity的新输入输出系统。本次修改unity需要重启&#xff0c;请先保存项目&#xff0c; 点击加号起名为MyCtrl&#xff0c; 点击加号设置为一轴的&#xff0c; 继续设置W键&#xff0c; 保存 生成自动脚本&#xff0c; 修改MyPlayer代码&#xff1a; using UnityEngine;…

华为产业链之车载激光雷达

一、智能汽车 NOA 加快普及&#xff0c;L3 上路利好智能感知硬件 1、感知层是 ADAS 最重要的一环 先进驾驶辅助系统 &#xff08;ADAS&#xff0c; Advanced driver-assistance system&#xff09;分“感知层、决策层、执行层”三个层级&#xff0c;其中感知层是最重要的一环…

vue创建前端项目

背景 项目中需要用到前端技术&#xff0c;通过技术调研和团队分析&#xff0c;则采用vue作为前端主要技术栈。 问题 安装好后vue&#xff0c;按理说就可以创建vue项目 vue init webpack 项目名称 npm install&#xff0c;使用vue-cli脚手架搭建项目卡在sill idealTree buil…

C#hybridCLR热更新方案初探

前言 暂时处于初步研究状态&#xff0c;目前的框架使用还是尚少&#xff0c;本篇文章旨在同步给大家大概的使用流程和使用心得&#xff0c;在初步建立新项目时可以适当考虑。 介绍 热更新 与强制更新相对应&#xff0c;移动平台上App的可执行程序没有发生变化&#xff0c;仅…

[Go]认识Beego框架

对比Gin的简洁&#xff0c;自己之前基于Gin撸了一个架子&#xff0c;确实比beego目录看着舒服多了&#xff0c;不过最近接触到beego的项目&#xff0c;beego的bee工具使用还是很方便&#xff0c;来简单梳理下细节&#xff1b; Beego是一个开源的Go语言Web应用框架&#xff0c;…

摄像机视角的切换_unity基础开发教程

摄像机视角的切换 前言一、场景搭建二、脚本编辑三、脚本挂载四、运行效果结语 前言 我们在游戏中经常可以看到游戏视角的切换&#xff0c;今天我们就做一个视角切换的小demo&#xff0c;学会之后可以将其融入到自己的游戏制作当中。 话不多说&#xff0c;我们现在开始&#xf…