基于 Ubuntu22.04 安装 SSH 服务

文章目录

  • 一、Ubuntu22.04 安装 SSH 服务
  • 二、配置 OpenSSH(安全性)
    • 1. 更改 OpenSSH 端口
    • 2. 限制使用 SSH 登录尝试次数
    • 3. 禁止 SSH 以 root 身份连接
  • 三、设置防火墙(UFW)锁定 SSH
  • 四、远程终端软件通过 SSH 连接 Ubuntu22.04
    • 1. 远程终端软件连接 Ubuntu(以 MobaXterm 为例)
    • 2. CMD 窗口连接 Ubuntu
    • 3. VS Code 连接 Ubuntu
  • 五、Ubuntu22.04 的 SSH 故障排查

在这里插入图片描述

安全外壳协议(Secure Shell,简称 SSH)是一种在不安全网络上用于安全远程登录和其他安全网络服务的协议。

SSH 由 IETF 的网络小组(Network Working Group)所制定,SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH 最初是 UNIX 系统上的一个程序,后来又迅速扩展到其他操作平台。SSH 在正确使用时可弥补网络中的漏洞。SSH 客户端适用于多种平台。几乎所有UNIX平台—包括 HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行 SSH。

——引用:安全外壳协议_百度百科

在这里插入图片描述

本教程的前置条件是,在 Windows 系统的宿主机上以搭建好了 Ubuntu22.04 的虚拟机,关于 Ubuntu22.04 虚拟机的搭建可以参考《基于 VMware 虚拟机的 Ubuntu22.04 系统安装和配置(新手保姆级教程)》。

一、Ubuntu22.04 安装 SSH 服务

安装 SSH 服务之前,最好先更新一下 Ubuntu 系统的软件包列表:

sudo apt update 

输入并运行下列命令,即可安装 OpenSSH:

sudo apt install openssh-server -y

安装好 SSH 后,可以输入 ssh -V 命令,检查 OpenSSH 服务器的版本,结果如下图所示:

在这里插入图片描述

二、配置 OpenSSH(安全性)

[!CAUTION]

此章节作为对 SSH 的额外了解,SSH 在安装后的默认配置适合大多数用户,如有必要配置,可以编辑 /etc/ssh/sshd_config 文件以调整。

OpenSSH 默认使用安全加密和身份验证,可以通过采取以下配置来进一步增强安全性。

1. 更改 OpenSSH 端口

更改默认的 OpenSSH 端口是防止未经授权访问我们的 Ubuntu 的有效方法,可以编辑 /etc/ssh/sshd_config 配置文件进行更改。

使用超级用户权限(sudo)打开 SSH 配置文件:

sudo vim /etc/ssh/sshd_config

原先的 /etc/ssh/sshd_config 配置文件,有很多代码都是被注释掉的,在这些注释中找到并取消注释 Port 此行。删除 # 符号并更改端口号(默认情况下是 22)。例如,将端口更改为 2222:

Port 2222

如下如所示:

在这里插入图片描述

保存文件并退出编辑器,输入下列命令重新启动 SSH 服务以使更改生效:

sudo systemctl restart ssh

需要注意的是,在更改端口后,要确保防火墙允许该端口的流量通过。

2. 限制使用 SSH 登录尝试次数

要在 Ubuntu 上使用 SSH 限制登录尝试,同样是编辑 /etc/ssh/sshd_config 配置文件进行更改,设置 MaxAuthTries 参数即可,该参数后的数字就是限制用户在一次 SSH 会话中尝试登录的次数。当达到指定的尝试次数后,SSH 服务器将拒绝进一步的登录尝试。

找到 MaxAuthTries 行,默认情况下被注释掉的,前面有一个 # 符号。取消注释并设置一个适当的尝试次数,如下图所示,设置为 3:

在这里插入图片描述

保存文件并退出编辑器,同样需要重新启动 SSH 服务才能生效。

现在 SSH 服务器将限制用户在一次会话中尝试登录的次数。超过指定的尝试次数后,用户将不再能够进行登录尝试,直到新的 SSH 会话开始。这可以增加服务器的安全性,防止暴力破解攻击。

3. 禁止 SSH 以 root 身份连接

禁止 SSH 以 root 身份连接是一种常见的安全实践,因为它可以减少潜在的风险。同样是编辑 /etc/ssh/sshd_config 配置文件进行更改,找到 PermitRootLogin 行,取消注释并将其设置为 no

在这里插入图片描述

保存文件并退出编辑器,同样需要重新启动 SSH 服务才能生效。

现在,SSH 将不再允许直接使用 root 用户登录。相反,我们自己也只能使用一个普通用户登录,然后在需要时 root 权限时通过 sudo 命令来获取 root 权限。这种做法有助于提高系统的安全性,因为它会减少直接攻击 root 用户账户的风险。

三、设置防火墙(UFW)锁定 SSH

确保防火墙允许新端口的流量通过非常重要,否则 SSH 连接将无法成功。在 Ubuntu 中,可以使用 ufw(Uncomplicated Firewall)来管理防火墙规则。

使用以下命令允许新端口的流量通过防火墙:

sudo ufw allow <new port>/tcp

例如,刚刚将端口更改为 2222,则应该运行:

sudo ufw allow 2222/tcp

然后启用防火墙:

sudo ufw enable

如果效果和下图所示一样,那么防火墙已经配置为允许通过新的 SSH 端口的流量,可以通过新的端口连接到 SSH 服务器。

在这里插入图片描述

四、远程终端软件通过 SSH 连接 Ubuntu22.04

1. 远程终端软件连接 Ubuntu(以 MobaXterm 为例)

这里以 MobaXterm 为例,以 SSH 的方式连接,以次输入 IP 地址、用户名和端口号(默认 22,改了就输入新的)。

在这里插入图片描述

然后输入密码回车即可(密码不显示,纯盲打)。

在这里插入图片描述

登录正常的话,就是下图所示的界面了。

在这里插入图片描述

2. CMD 窗口连接 Ubuntu

如果没有安装 MobaXterm 等终端软件,可以用 Windows 的 OpenSSH 客户端。在 Windows 10 上,可以通过设置应用中的 “应用和功能” 菜单找到 “可选功能”,然后启用 “OpenSSH 客户端” 功能。在 Windows 11 上,默认情况下 OpenSSH 客户端已经预安装,无需再进行额外的安装。

按组合键 Win + r 打开运行窗口,使用 ssh 命令连接到远程服务器,以下是命令的格式:

ssh username@remote_host
ssh -p port_number username@remote_host

第一行是默认端口为 22 的连接命令,第二行是自定义端口号,port_number 为端口号,username 为用户名,remote_host 为 IP 地址。下面的例子是 SSH 连接我的 Ubuntu 主机的命令:

ssh -p 2222 grayson@192.168.31.90

输入到运行命令框中:

在这里插入图片描述

第一次要先输入 “yes” 回车,再输入密码回车(之后只要输入密码就行),如下图:

在这里插入图片描述

3. VS Code 连接 Ubuntu

请参考博客《VS Code 远程连接 SSH 服务器》。

五、Ubuntu22.04 的 SSH 故障排查

通过 SSH 连接 Ubuntu 系统时,最常见的 SSH 服务故障问题就是连接失败,可以按照以下步骤进行故障排查:

  1. 确认 SSH 服务是否运行

    使用以下命令检查 SSH 服务是否正在运行:

    sudo systemctl status ssh
    

    如果 SSH 服务正在运行,应该会看到类似于 “active (running)” 的消息。如果服务未运行,您可以尝试启动它:

    sudo systemctl start ssh
    

    如图所示:

在这里插入图片描述

  1. 检查 SSH 配置文件

    确保 SSH 配置文件 /etc/ssh/sshd_config 中的设置正确。特别关注 PortPermitRootLoginMaxAuthTries 等参数是否设置为预期值。

    在这里插入图片描述

  2. 检查防火墙设置

    如果更改了 SSH 端口,要确保防火墙允许新端口的流量通过,可以使用以下命令查看当前允许的端口:

    sudo ufw status
    

    如下图所示,我允许的端口号为 2222,可以使用 ufwiptables 命令来配置防火墙规则。

    在这里插入图片描述

  3. 查看系统日志

    检查系统日志以查找与 SSH 相关的任何错误消息。系统日志通常存储在 /var/log 目录下,可以查看 /var/log/auth.log/var/log/syslog 文件。

  4. 检查 SSH 配置的完整性

    检查 SSH 配置文件的语法是否正确,可以使用 sshd 命令的 -t 选项来测试配置文件的语法是否正确:

    sudo sshd -t
    

    如果输入命令后,没有显示任何信息,则表示配置正确。

  5. 查看网络连接

    确保您的服务器网络连接正常。您可以使用 ping 命令来测试网络连接:

    ping -c 4 <server_ip>
    

如果仍然无法解决问题,可以尝试查看更详细的日志信息,或者尝试在互联网上搜索相关的错误消息以获取更多帮助。

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

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

相关文章

自学32单片机两个周了,感觉非常懵逼怎么办?

在开始前我分享下我的经历&#xff0c;我刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;一年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些单片机学习方法和资料&#xff0c;让我不断提升自己&#xff0c;感谢帮助过我的人&#xff0c; 如大家和我一样…

如何使用Shortemall自动扫描URL短链接中的隐藏内容

关于Shortemall Shortemall是一款针对URL地址安全与Web内容安全的强大工具&#xff0c;该工具基于纯Python开发&#xff0c;专为Web安全方向设计&#xff0c;可以帮助广大研究人员以自动化的形式扫描URL短链接中的隐藏内容。 Shortemall的全名为ShortEm All&#xff0c;该工具…

【大比武05】多方主体参与下的工程档案资料数据化实现路径探究

关注我们 - 数字罗塞塔计划 - 数据化&#xff0c;是以数据为基础&#xff0c;以信息技术为手段&#xff0c;以数据分析为切入点&#xff0c;通过数据发现并分析问题&#xff0c;实现科学决策。而工程档案资料的数据化是实现工程全生命周期管理智慧化&#xff0c;发挥数据生产…

机器学习1——线性回归、误差推导

有监督——分类、回归 一、线性回归 对于一个线性方程&#xff0c;没办法拟合所有的数据点&#xff0c;但是要尽可能的覆盖尽可能多的点。 在下面的图中&#xff0c;x01。添加这一项的目的是&#xff1a;将数据矩阵补全&#xff08;比如年龄是x1、工资是x2&#xff0c;那么x0手…

“等保测评实施策略:保障企业信息安全合规“

等保测评&#xff0c;即网络安全等级保护测评&#xff0c;是企业保障信息安全合规的重要实施策略。以下是企业实施等保测评的一些关键策略&#xff1a; 理解等保测评的重要性&#xff1a; 等保测评有助于企业识别和评价信息系统的安全性能&#xff0c;提供改进建议&#xff0c;…

可重构柔性装配产线:为工业制造领域注入了新的活力

随着科技的飞速发展&#xff0c;智能制造正逐渐成为引领工业革新的重要力量。在这一浪潮中&#xff0c;可重构柔性装配产线以其独特的技术优势和创新理念&#xff0c;为工业制造领域注入了新的活力&#xff0c;开启了创新驱动的智能制造新篇章。 可重构柔性装配产线是基于富唯智…

面试常见手撕代码

目录 1.线程池 and 数据库连接池 2.生产者&#xff0c;消费者问题 3.排序算法 1.线程池 and 数据库连接池 线程池 #include <iostream> #include <vector> #include <queue> #include <thread> #include <mutex> #include <condition_va…

2024第二届智慧教育和人类发展国际会议(ICSEHD2024)

2024第二届智慧教育和人类发展国际会议(ICSEHD2024) 会议简介 智慧教育对于提升教育质量、促进教育公平、推动教育现代化和数字化转型、培养创新人才以及推动教育理论的发展都具有重要的意义&#xff0c;对人类发展产生着深远的影响&#xff0c;人类发展是智慧教育的最终目的…

易图讯科技数字武装三维电子沙盘

深圳易图讯科技(www.3dgis.top)集成了高清卫星影像、地形数据、实景三维模型、基干民兵、普通民兵、重要目标、兵要地志、企业潜力 、行业潜力 、社会组织潜力 、特种装备器材潜力、敌情数据、现场环境数据、物联感知信息&#xff0c;构建一体化的数字孪生空间&#xff0c;实现…

美港通正规股票炒股市场又一新能车火了!上市首日,大涨34%

查查配大家早上好!昨夜今晨,又有很多大事发生! 美三大股指涨跌不一,美债收益率集体收涨;OpenAI或推AI语音助手;来自中国的新能源车品牌——极氪在美股上市,首日大涨超34%。 美港通证券以其专业的服务和较低的管理费用在市场中受到不少关注。该平台提供了实盘交易、止盈止损、…

element ui输入框后面带输入的字符数量

使用el-input的属性&#xff1a; maxlength&#xff1a;最长字符限制&#xff1b; show-word-limit&#xff1a;显示输入字符数量&#xff1b; 例&#xff1a; <el-input v-model"title" placeholder"请输入名称" maxlength"200" show-wor…

woffice– 内部网和外部网WordPress高端资讯主题

下载地址&#xff1a;https://m.gx.cn/site/3046.html 完全灵活&#xff0c;与最新的WordPress品牌兼容 翻译语言超过15种 使用最新技术设计快速web应用程序 所有这些都以谷歌材料设计为灵感&#xff0c;采用易于定制的设计&#xff0c;给人一种优美的现代感和易于导航的用户…

ERROR 1045 (28000) Access denied for user ‘root‘@‘IP‘(using password YES/NO)

查看权限 要查看MySQL用户的权限&#xff0c;您可以使用SHOW GRANTS语句。这将列出用户的权限&#xff0c;包括授予的权限和可以授予其他用户的权限。 以下是查看当前用户权限的SQL命令&#xff1a; SHOW GRANTS; 如果您想查看特定用户的权限&#xff0c;可以使用以下命令&…

让 CloudFlare 支持 Brotli 压缩算法 11 级压缩比,更节流!

站长们应该都知道 Brotli 压缩算法吧&#xff0c;这是一种通用的无损压缩算法。它结合使用 LZ77 算法的一个现代变体&#xff08;Lempel-Ziv 编码&#xff09;、霍夫曼编码和二阶上下文建模来压缩数据&#xff0c;提供了与当前最佳通用压缩方法相媲美的压缩比。2015 年 9 月谷歌…

笔记-跨域方式实现原理

websocket Websocket是HTML5的一个持久化的协议&#xff0c;它实现了浏览器与服务器的全双工通信&#xff0c;同时也是跨域的一种解决方案。WebSocket和HTTP都是应用层协议&#xff0c;都基于 TCP 协议。但是 WebSocket 是一种双向通信协议&#xff0c;在建立连接之后&#xff…

51-50 两万字长文解读ControlNet论文和代码,以及自定义模型训练和图片精确控制生成实验

今天咱们来看 ICCV2023 最佳论文Adding Conditional Control to Text-to-Image Diffusion Models&#xff0c;又称为ControlNet。提到图像生成Finetuning工程方法&#xff0c;有Textual inversion、DreamBooth、LoRA、T2I-Adapter以及ControlNet&#xff0c;其中最著名的当属Co…

Jupyter配置

一、修改Jupyter打开界面 &#xff08;1&#xff09;打开【Anaconda Prompt】&#xff0c;输入【jupyter notebook --generate-config】命令 从运行结果可知【jupyter_notebook_config.py】的位置 &#xff08;2&#xff09;使用【记事本】打开 找到# c.NotebookApp.noteb…

同城预约上门服务家政小程序

基于Thinkphp和原生微信小程序开发的一款同城预约、上门服务、到店核销家政系统&#xff0c;用户端、服务端、门店端各端相互依赖又相互独立&#xff0c;支持选择项目、选择服务人员、选择门店多种下单方式&#xff0c;支持上门服务和到店核销两种服务方式&#xff0c;支持自营…

瞬息全宇宙——平行宇宙终极教程,手把手教你做出百万点赞视频

最近一种叫“瞬息全宇宙”的视频火了&#xff0c;抖音一期视频百万赞&#xff0c;各个博主视频都在带瞬息全宇宙这个标签&#xff0c;于是就有很多朋友催我出教程了&#xff0c;在琢磨了几天之后&#xff0c;终于整出来了 教程包含了插件的安装&#xff0c;界面的讲解&#xff…

C语言 | Leetcode C语言题解之第80题删除有序数组中的重复项II

题目&#xff1a; 题解&#xff1a; int removeDuplicates(int* nums, int numsSize) {if (numsSize < 2) {return numsSize;}int slow 2, fast 2;while (fast < numsSize) {if (nums[slow - 2] ! nums[fast]) {nums[slow] nums[fast];slow;}fast;}return slow; }