远程登录服务(ssh)
一、远程登录服务概述
1. 概念
远程登录服务就像是一个神奇的桥梁,它让你能够跨越物理距离,通过网络连接到另一台计算机上进行操作。无论你身在何处,只要有网络连接,你就可以像坐在目标计算机前一样进行各种操作。
2. 功能
-
分享主机的运算能力:通过远程登录,你可以利用远程计算机的强大运算能力来完成复杂的任务,就像是拥有了一个远程的超级大脑。
-
有限度开放连接:服务器类型可以根据需要有限度地开放连接,既保证了安全性,又能让特定用户访问所需资源。
-
只对内网开放:工作站类型通常只对内网开放,就像是给你的计算机加了一层保护墙,只允许内部网络中的用户访问。
3. 分类
文字接口
-
明文传输:Telnet、RSH等早期的远程登录方式,虽然能实现远程操作,但数据传输是明文,安全性极低,就像是在公共场所大声说出你的秘密,很容易被别人窃取。
-
加密传输:SSH(Secure Shell Protocol)是目前主流的远程登录方式,它通过加密技术保护数据传输,就像是给你的数据穿上了盔甲,安全又可靠。
图形接口
XDMCP、VNC、XRDP等图形接口远程登录方式,就像是给你戴上了虚拟现实眼镜,你可以直接看到远程计算机的桌面,进行图形化操作,就像是在操作本地电脑一样。
二、SSH加密技术
1. 加密技术简介
SSH使用非对称密钥系统来处理加密与解密。就像是你有一对钥匙,一把是公钥,可以公开给任何人;另一把是私钥,只有你自己保存。别人用你的公钥加密数据,只有你能用私钥解密。
2. 密钥解析
-
公钥(public key):提供给远程主机进行数据加密,所有人都可以获取你的公钥,就像是你家的门牌号,可以告诉别人。
-
私钥(private key):用于解密远程主机加密的数据,只有你自己拥有,就像是你家的钥匙,必须妥善保管。
三、SSH工作过程
1. 版本号协商阶段
服务器端和客户端就像是初次见面的两个人,先互相介绍自己支持的SSH协议版本,通过协商确定使用哪个版本进行通信。
2. 密钥和算法协商阶段
双方根据各自支持的算法列表,协商出最终使用的加密算法等参数,就像是商量好用哪种暗语进行交流,确保数据传输的安全性。
3. 认证阶段
SSH客户端向服务器端发起认证请求,服务器端对客户端进行认证。有两种认证方法:
-
基于口令的认证:客户端将用户名和密码加密后发送给服务器,服务器解密后与保存的信息进行比对。

-
基于密钥的认证:客户端将公钥传给服务器,服务器验证公钥后,生成随机字符串并加密发送给客户端,客户端解密后返回,服务器验证返回的字符串是否正确。

4. 会话请求阶段
认证通过后,客户端向服务器端发送会话请求,就像是告诉服务器“我们可以开始正式交流了”。
5. 交互会话阶段
服务器端和客户端开始正式的数据交互,所有传输的数据都被加密,保证了数据的安全性。
四、SSH服务配置
1. 安装SSH
在Linux系统中,安装SSH服务非常简单,只需要一条命令就可以完成。例如,在基于Red Hat的系统中,可以使用以下命令安装SSH服务器:
[root@server ~]# yum install openssh-server
2. 配置文件分析
SSH的主配置文件通常位于/etc/ssh/sshd_config(服务端)。这个文件就像是SSH服务的工作手册,里面规定了各种参数,例如监听的端口、允许登录的用户等。以下是一些常见的配置参数:
-
Port:指定SSH服务监听的端口号,默认是22端口,可以根据需要修改为其他端口,以增加安全性。 -
ListenAddress:指明SSH服务监听的IP地址,可以限制只监听特定的IP地址。 -
PermitRootLogin:控制是否允许root账户远程登录,可设置为yes(允许)、no(禁止)等。 -
AllowUsers:指定允许远程登录的用户列表,增强安全性。 -
PasswordAuthentication:控制是否允许使用密码进行认证。 -
PubkeyAuthentication:控制是否允许使用公钥认证。
21.#Port 22 # 默认监听22端口,可修改
22.#AddressFamily any # IPV4和IPV6协议家族用哪个,any表示二者均有
23.#ListenAddress 0.0.0.0 # 指明监控的地址,0.0.0.0表示本机的所有地址(默认可修改)
24.#ListenAddress :: # 指明监听的IPV6的所有地址格式26.#HostKey /etc/ssh/ssh_host_rsa_key # rsa私钥认证,默认
27.#HostKey /etc/ssh/ssh_host_ecdsa_key # ecdsa私钥认证
28.#HostKey /etc/ssh/ssh_host_ed25519_key # ed25519私钥认证34 #SyslogFacility AUTH # ssh登录系统的时会记录信息并保存在/var/log/secure
35.#LogLevel INFO # 日志的等级39.#LoginGraceTime 2m # 登录的宽限时间,默认2分钟没有输入密码,则自动断开连接
40 PermitRootLogin yes # 允许管理员root登录
41.#StrictModes yes # 是否让sshd去检查用户主目录或相关文件的权限数据
42.#MaxAuthTries 6 # 最大认证尝试次数,最多可以尝试6次输入密码。之后需要等待某段时间后才能再次输入密码
43.#MaxSessions 10 # 允许的最大会话数49.AuthorizedKeysFile .ssh/authorized_keys # 选择基于密钥验证时,客户端生成一对公私钥之后,会将公钥放到.ssh/authorizd_keys里面
65 #PasswordAuthentication yes # 登录ssh时是否进行密码验证
66 #PermitEmptyPasswords no # 登录ssh时是否允许密码为空……
123.Subsystem sftp /usr/libexec/openssh/sftp-server #支持 SFTP ,如果注释掉,则不支持sftp连接
AllowUsers user1 user2 #登录白名单(默认没有这个配置,需要自己手动添加),允许远程登录的用户。如果名单中没有的用户,则提示拒绝登录
1. /etc/ssh/sshd_config
-
用途:这是 SSH 服务端(即 SSH 守护进程,sshd)的配置文件。
-
功能:用于配置 SSH 服务端的行为,包括监听的端口、认证方式、权限控制、日志记录等。这些设置影响所有通过 SSH 连接到该服务器的用户。
2. /etc/ssh/ssh_config
-
用途:这是 SSH 客户端的配置文件。
-
功能:用于配置 SSH 客户端的行为,这些设置影响从该客户端发起的所有 SSH 连接。用户可以在这里设置默认的连接选项,如用户名、端口号、使用的密钥文件等。
五、SSH实验
实验1:修改SSH端口号
-
服务端操作:编辑SSH配置文件,将默认的22端口修改为你想要的端口,例如2222。
[root@server ~]# vim /etc/ssh/sshd_config
# 修改后的配置文件中,将Port 22改为Port 2222
-
重启SSH服务:修改配置文件后,需要重启SSH服务使更改生效。
[root@server ~]# systemctl restart sshd
-
客户端操作:在客户端使用新的端口号进行连接。
[root@node1 ~]# ssh -p 2222 root@服务器IP地址
实验2:拒绝root账户远程登录
-
修改配置文件:在SSH配置文件中,将
PermitRootLogin参数设置为no,禁止root账户远程登录。
[root@server ~]# vim /etc/ssh/sshd_config
PermitRootLogin no
-
重启SSH服务:使配置更改生效。
[root@server ~]# systemctl restart sshd
-
客户端测试:尝试使用root账户远程登录,应该会被拒绝。
[root@node1 ~]# ssh root@服务器IP地址
实验3:允许特定账户进行SSH登录
-
服务端添加新账户:创建一个新的用户账户,例如
test。
[root@server ~]# useradd test
[root@server ~]# passwd test
-
修改配置文件:在SSH配置文件中,添加
AllowUsers test,只允许test用户远程登录。
[root@server ~]# vim /etc/ssh/sshd_config
AllowUsers test
-
重启SSH服务:重启服务使配置生效。
[root@server ~]# systemctl restart sshd
-
客户端测试:使用
test用户进行远程登录,应该可以成功;而使用其他账户登录则会被拒绝。
[root@node1 ~]# ssh test@服务器IP地址
实验4:实现密钥登录(免密登录)
-
客户端生成公私钥对:在客户端使用
ssh-keygen命令生成公私钥对。
[root@node1 ~]# ssh-keygen -t rsa
-
上传公钥到服务器:使用
ssh-copy-id命令将客户端的公钥上传到服务器端指定用户账户下。
[root@node1 ~]# ssh-copy-id root@服务器IP地址
-
客户端测试:再次连接服务器时,无需输入密码即可登录,实现免密登录。
[root@node1 ~]# ssh root@服务器IP地址
实验5:xshell使用密钥登录
-
服务器端准备:确保服务器端的
/root/.ssh/authorized_keys文件存在,并具有正确的权限。 -
xshell操作:
-
新建密钥:在xshell中,选择新建用户密钥。
-
生成公钥:按照提示生成公钥,并保存。
-
上传公钥:将生成的公钥内容复制到服务器端的
/root/.ssh/authorized_keys文件中。 -
配置连接:在xshell中新建会话,选择使用公钥认证方式进行连接。
-
-
连接测试:使用配置好的密钥连接服务器,无需输入密码即可登录,方便又安全。
通过以上实验,可以深入理解SSH服务的配置和使用,掌握如何通过修改配置文件和使用密钥认证来增强远程登录的安全性。
相关文章:
远程登录服务(ssh)
一、远程登录服务概述 1. 概念 远程登录服务就像是一个神奇的桥梁,它让你能够跨越物理距离,通过网络连接到另一台计算机上进行操作。无论你身在何处,只要有网络连接,你就可以像坐在目标计算机前一样进行各种操作。 2. 功能 分享…...
如何在阿里云linux主机上部署Node.Js
在阿里云的Linux服务器上搭建Node.js编程环境可以通过以下步骤完成。这里以常见的 Ubuntu/CentOS 系统为例,提供两种安装方式(包管理器、NVM多版本管理): 一、通过包管理器安装(适合快速安装指定版本) 1. …...
VS Code连接远程服务遇到的问题
目录 一、VS Code链接远程服务 二、修改的文件不能保存 三、无法与 "Ip地址" 建立连接: 远程主机密钥已更改,端口转发已禁用. 四、解决远程连接后,每次断开让输入密码问题,实现免密登录 没有秘钥对,免密配置流程&a…...
算法学习第十六天:动态规划(补充题目)
动态规划题 目录 最大乘积子数组股票买卖问题最长递增子序列零钱兑换编辑距离 最大乘积子数组 问题描述 给定一个整数数组,求乘积最大的连续子数组的乘积。 关键点 需要同时记录当前最大值和最小值(负负得正)状态转移方程: …...
最长连续子序列和的所含元素 -- Kadane算法拓展
建议先回顾经典Kadane算法 -- 最长连续子序列和: 最大连续子序列和(动态规划 -- 经典Kadane算法)-CSDN博客 拓展代码: def max_subarray_sum(nums):global_max current_max nums[0]left right temp 0for i in range(1, len(…...
大模型训练 | 智能体知识库 资源收集之心理咨询问答数据集
最近我一直在研究AI大模型相关的内容,想着从现在开始慢慢收集各种各样的资源,万一以后需要训练大模型的时候可以用到,或者自己以后也许会需要。今天我想介绍一组“心理咨询问答数据集”产品,包含9414条心理咨询问答数据࿰…...
AI Agent开发大全第十一课-超维空间里的语义翻译官:Embedding技术
一、Embedding:数字世界的"翻译官"与"导航仪" 1.1 从字符到向量的魔法 当我们输入"巧克力"三个字时,传统计算机只能识别ASCII码组成的符号序列,而Embedding技术就像给每个词语配备了"超维定位坐标"。通过深度学习模型,它将离散的…...
2024年第九届全国固态电池研讨会(脱敏)PPT合集(41份).zip
2024年第九届全国固态电池研讨会(脱敏)PPT合集,共41份。供大家参考学习。 1、锂金属全固态电池关键材料与器件.pdf 2、聚醚基聚合物锂金属电池.pdf 3、氧化物固态电解质与高能量密度安全固态锂电池.pdf 4、复合固态电解质界面设计工艺探索与…...
OpenCV三维解算常用方法C++
如果标定过程是通过OpenCV张正友标定法实现的,得到的内参外参保存在.txt文件中是这样的形式: ① 内参intrinsics.txt: ② 外参extrinsics.txt: 那么可以通过如下方法读取.txt文件获取左右相机内外参,主要包括三维解算…...
JavaScript 类型转换:全面解析与实践
引言 在 JavaScript 编程里,类型转换是一个频繁出现且极为重要的操作。由于 JavaScript 是一种动态类型语言,变量的类型在运行时可以改变,这就使得类型转换变得十分常见。类型转换主要分为隐式类型转换和显式类型转换,下面将详细…...
Qt Concurrent Filter and Filter-Reduce
并行滤波和滤波-还原 QtConcurrent::filter()、QtConcurrent::filtered() 和 QtConcurrent::filedReduced() 函数并行过滤序列中的项目,如QList 。QtConcurrent::filter() 就地修改序列,QtConcurrent::filtered() 返回包含过滤内容的新序列,…...
【蓝桥杯每日一题】3.25
🏝️专栏: 【蓝桥杯备篇】 🌅主页: f狐o狸x “OJ超时不是终点,是算法在提醒你该优化时间复杂度了!” 目录 3.25 差分数组 一、一维差分 题目链接: 题目描述: 解题思路:…...
深挖增长内核:好产品驱动增长的全方位解析
年前在老板的带领下深入学习了《增长黑客》,并思考了在CPS站外引流的落地方案,最近刚好在做京东联盟的京粉推客增长体系建设,再次回顾一下增长黑客方法以及记录一下思考。 好产品才是增长的根本。增长黑客理念风靡,“啊哈时刻” 概…...
Python技术栈与数据可视化创意实践详解(三)
Python在数据可视化领域凭借丰富的库和灵活的生态系统,能够实现从基础图表到复杂交互式可视化的全场景覆盖。以下从技术选型、创意实现到实战优化进行系统化解析,并提供可直接落地的代码示例。 一、Python数据可视化技术栈 1. 基础与统计可视化 Matplotl…...
前端NVM安装
https://v0.dev/chat/settings 本地启动环境 1安装 nvm 2安装node nvm install v18.19.0 nvm install v20.9.0 nvm use 18 node -v 3安装 pnpm npm install -g pnpm 或者 npm i -g pnpm 4启动 代码 目录下 执行 pnpm i pnpm run dev 4.1到代码目录下 4.2直接cmd…...
Springboot应用配置github自动流部署 深入理解CI/CD:构建、测试和部署的自动化完整流程
什么是 CI 持续集成 通过自动化的流程和工具,提高软件开发的效率、质量和交付速度。 持续集成是开发团队通过将代码的不同部分集成到共享存储库中,并频繁地进行构建和测试,以确保代码的一致性和稳定性。 概念 在现在的开发模式中&#x…...
解锁DeepSeek潜能:Docker+Ollama打造本地大模型部署新范式
🐇明明跟你说过:个人主页 🏅个人专栏:《深度探秘:AI界的007》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、什么是Docker 2、什么是Ollama 二、准备工作 1、操…...
c++R 格式
问题描述 小蓝最近在研究一种浮点数的表示方法:RR 格式。对于一个大于 0 的浮点数 dd,可以用 RR 格式的整数来表示。给定一个转换参数 nn,将浮点数转换为 RR 格式整数的做法是: 将浮点数乘以 2n2n; 四舍五入到最接近的整数。 …...
qt QOffscreenSurface详解
1、概述 QOffscreenSurface 是 Qt 中用于离屏渲染的一个类。它允许在不直接与屏幕交互的情况下进行 OpenGL 渲染操作,常用于生成纹理、预渲染场景等。通过 QOffscreenSurface,可以在后台创建一个渲染表面,进行绘制操作,并将结果捕…...
基于Spring Boot的消防物资存储系统的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
深度学习算法清单
目录 1. 神经网络必备基础知识点 2. 神经网络前向传播与反向传播 3. 网络模型整体架构分析实例 4. 神经网络建模效果分析 5. 激活函数与过拟合问题解决 6. 卷积神经网络核心知识点 7. 卷积建模流程与各参数作用分析 8. 池化层的作用与效果 9. 经典卷积神经网络架构分析…...
docker ssh远程连接
目录 操作命令: 确保 SSH 配置允许 root 登录: docker提交: 操作命令: # 进入容器 docker exec -ti lbg04 /bin/bash# 更新包管理并安装 SSH 服务(Ubuntu/Debian 示例) apt-get update apt-get install…...
leetcode 20.有效括号
20. 有效的括号 - 力扣(LeetCode) class Solution:def isValid(self, s: str) -> bool:stack []for i in s :if i in ((,{,[ ):stack.append(i)elif i in () ):# 这种情况是 栈弹出元素为空时候 ,右半部分的括号多出来一些 比如&#x…...
【杂记三】Cython加速模块cython_nms未编译
一、问题 from cython_nms import nms as cnms ModuleNotFoundError: No module named cython_nms Github download 需要生成如下的 二、安装编译编译安装 cython_nms 1. 确保已经安装了 Cython conda activate your-env pip install cython2. 编译编译 cython_nms 进入编译…...
LeetCode(977):有序数组的平方
有序数组的平方 题目链接 题目:给你一个按非递减顺序排序的整数数组 nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。 //暴力 #include<stdio.h> void sort(int *nums,int n){for(int i0;i<n;i)for(int ji1;j<…...
订票系统|基于Java+vue的火车票订票系统(源码+数据库+文档)
订票系统目录 基于Springbootvue的火车票订票系统 一、前言 二、系统设计 三、系统功能设计 1会员信息管理 2 车次信息管理 3订票订单管理 4留言板管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍…...
「Unity3D」使用C#获取Android虚拟键盘的高度
原理是:利用getWindowVisibleDisplayFrame方法,获取Android窗口可见区域的Rect,这个Rect剔除了状态栏与导航栏,并且在有虚拟键盘遮挡的时候,会剔除这个遮挡区域。 接着,Unity的safeArea也剔除了状态栏与导…...
近场通信(NFC)在电动车启动系统中的技术实现路径
电动车NFC一键启动系统基于13.56MHz频段实现非接触控制,技术方案要点如下: 系统架构 硬件核心 NFC芯片(如N32G45x)处理通信协议,支持手机/卡片识别STM32主控解析指令,AES-128加密模块保障双向认证…...
斜线、短横、空格,三种分隔日期的优雅解析(Python | DeepSeek)
标准日期解析操作,str.replace链式如灵蛇蜿蜒,三元表达式像空灵仙家妙法。 笔记模板由python脚本于2025-03-25 22:32:24创建,本篇笔记适合三元表达式、字符串操作修习的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值:在…...
自动化逆向框架使用(Objection+Radare2)
1. 工具链架构与核心优势 1.1 动静结合逆向体系 graph LR A[动态分析] -->|Objection实时Hook| B[关键点定位] B --> C[行为数据捕获] D[静态分析] -->|Radare2深度解析| E[控制流重建] E --> F[漏洞模式识别] B --> F C --> F 组合优势对比&…...
