远程管理SSH服务
一、搭建SSH服务
1、关闭防火墙与SELinux
# 关闭firewalld防火墙 # 临时关闭 systemctl stop firewalld # 关闭开机自启动 systemctl disable firewalld # 关闭selinux # 临时关闭 setenforce 0 # 修改配置文件 永久关闭 vim /etc/selinux/config SELINUX=disabled
2、配置yum源

JumpServer配置外网YUM源 => 阿里云
# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup # wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo # yum clean all # yum makecache
RealServer配置本地YUM源 => 把光盘镜像作为仓库(自建YUM仓库)
① 挂载光盘
# mkdir /mnt/cdrom # mount -o ro /dev/sr0 /mnt/cdrom # chmod +x /etc/rc.local # echo 'mount -o ro /dev/sr0 /mnt/cdrom' >> /etc/rc.local
② 编写local.repo文件
# cd /etc/yum.repos.d # vim local.repo [local] name=local yum baseurl=file:///mnt/cdrom enabled=1 gpgcheck=0
3、openssh软件的安装
SSH服务底层的软件名称叫做openssh,open开源,ssh就是ssh服务。openssh属于C/S架构软件,其拥有客户端与服务器端。
客户端:ssh
服务端:openssh-server
安装步骤:
# yum install openssh -y
检查openssh是否安装成功
# rpm -qa |grep openssh 或 # yum list installed |grep openssh
获取openssh生成的文件列表
# rpm -ql openssh-server # 配置文件 /etc/ssh/sshd_config => ssh服务的主配置文件 /etc/sysconfig/sshd # 服务管理脚本 /usr/lib/systemd/system/sshd.service => systemctl start sshd # 文件共享服务 提供文件上传下载的服务 /usr/libexec/openssh/sftp-server # 二进制文件程序文件 /usr/sbin/sshd # 公钥生成工具 /usr/sbin/sshd-keygen # man手册 /usr/share/man/man5/sshd_config.5.gz /usr/share/man/man8/sftp-server.8.gz /usr/share/man/man8/sshd.8.gz
# rpm -ql openssh-clients # 客户端配置文件 /etc/ssh/ssh_config # 远程copy命令 服务器间进行文件传输 /usr/bin/scp # sftp客户端 上传下载文件操作 /usr/bin/sftp /usr/bin/slogin /usr/bin/ssh /usr/bin/ssh-add /usr/bin/ssh-agent /usr/bin/ssh-copy-id /usr/bin/ssh-keyscan # 客户端man手册 /usr/share/man/man1/scp.1.gz /usr/share/man/man1/sftp.1.gz /usr/share/man/man1/slogin.1.gz /usr/share/man/man1/ssh-add.1.gz /usr/share/man/man1/ssh-agent.1.gz /usr/share/man/man1/ssh-copy-id.1.gz /usr/share/man/man1/ssh-keyscan.1.gz /usr/share/man/man1/ssh.1.gz /usr/share/man/man5/ssh_config.5.gz /usr/share/man/man8/ssh-pkcs11-helper.8.gz
4、查看并修改ssh服务端的配置文件
# man 5 sshd_config
RealServer:禁止root账号远程登录
# man 5 sshd_config PermitRootLogin => yes or no,默认为yes 代表允许通过root账号远程登录此服务器
# vim /etc/ssh/sshd_config 38行 PermitRootLogin no
5、sshd服务管理
# systemctl restart sshd => 重启 # systemctl status sshd => 状态 # systemctl stop sshd => 停止 # systemctl start sshd => 启动 # systemctl enable sshd => 开机自启动 # systemctl disable sshd => 开机不自启 # ps -ef |grep sshd => 进程 或 # netstat -tnlp |grep sshd => 端口 或 # ss -naltp |grep sshd
二、SSH服务任务解决方案
1、创建用户并授权
JumpServer跳板机创建用户并授权
第一步:创建用户与用户组(html前端组,tom与jerry)
# 创建html前端组 # groupadd html # 创建组内用户tom与jerry # useradd -g html tom # useradd -g html jerry
第二步:为用户添加密码
# echo 123456 |passwd --stdin tom # echo 123456 |passwd --stdin jerry
第三步:为开发人员创建数据目录并且设置相应的权限
① 创建用户的数据目录:
# mkdir -p /code/html => 前端组 # ll -d /code/html drwxr-xr-x. 2 root root 6 May 24 10:36 /code/html
② 更改目录的文件所属组(更改为html,代表html组内成员可以对这个目录进行管理)
# chgrp -R html /code/html drwxr-xr-x. 2 root html 6 May 24 10:36 /code/html # chmod -R g+w /code/html drwxrwxr-x. 2 root html 6 May 24 10:36 /code/html
③ 添加粘滞位权限,防止误删除操作
# chmod 1770 /code/html drwxrwx--T. 2 root html 6 May 24 10:36 /code/html
2、测试用户权限
测试用户权限是否设置成功,可以结合第1步一起完成
3、禁用root登录
RealServer服务器端:
# vim /etc/ssh/sshd_config PermitRootLogin no
4、更改SSH默认端口
RealServer服务器端:
# vim /etc/ssh/sshd_config 17行 Port 3712
5、重启SSH服务
# systemctl restart sshd 或 # systemctl reload sshd
restart与reload的本质区别:
① restart其实相当于stop然后在start
② reload不停止现有业务,只是重新加载sshd对应的配置文件
6、在RealServer创建一个code账号
# useradd code # echo 123456 |passwd --stdin code
测试:在JumpServer远程连接RealServer
# ssh -p 3721 code@11.1.1.100
7、SSH客户端不验证指纹
第一次连接远程服务器时:
The authenticity of host '11.1.1.100 (11.1.1.100)' can't be established. ECDSA key fingerprint is SHA256:Y/cQNWWkX15o2MsJ5HOQBI2m8S33qIA+x3zys8J4pOY. ECDSA key fingerprint is MD5:76:61:86:8b:d5:ee:bf:9c:60:e6:12:fa:f6:f0:74:36. Are you sure you want to continue connecting (yes/no)?yes Warning: Permanently added '11.1.1.100' (ECDSA) to the list of known hosts.
如果我们不想验证指纹,可以通过更改SSH客户端的配置文件
JumpServer:
# vim /etc/ssh/ssh_config 35行 StrictHostKeyChecking no
8、用专业工具pwgen生成用户密码
在实际生产环境中,其用户密码一定不要手工设置,建议使用专业的密码生成工具如pwgen。
① 安装随机密码生成工具pwgen
② 使用pwgen工具生成随机密码
③ 给账号code设置密码
第一步:创建code开发者账号
# useradd code
第二步:配置EPEL源,安装pwgen工具
# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo # yum clean all # yum makecache
第三步:安装pwgen密码生成工具
# yum install pwgen -y
第四步:使用pwgen生成随机密码
# pwgen -cnBs1 10 1
扩展:pwgen密码生成器的使用
# pwgen --help # 用法: pwgen 选项参数 长度 生成个数 Usage: pwgen [ OPTIONS ] [ pw_length ] [ num_pw ] # 密码中至少包含一个大写字母 -c or –capitalize # 密码中不包含大写字母 -A or –no-capitalize # 密码中至少包含一个数字 -n or –numerals # 密码中不包含数字 -0 or –no-numerals # 密码中至少包含一个特殊符号 -y or –symbols # 生成完全随机密码 -s or –secure # 密码中不包含歧义字符(例如1,l,O,0) -B or –ambiguous # 使用SHA1 hash给定的文件作为一个随机种子 -H or –sha1=path/to/file[#seed] # 在列中打印生成的密码 -C # 不要在列中打印生成的密码,即一行一个密码 -1 # 不要使用任何元音,以避免偶然的脏话 -v or –no-vowels
三、SSH服务补充
1、scp命令
主要功能:用于Linux系统与Linux系统之间进行文件的传输(上传、下载)
上传:
# scp [选项] 本地文件路径 远程用户名@远程服务器的IP地址:远程文件存储路径 -r : 递归上传,主要针对文件夹 -P : 更换了SSH服务的默认端口必须使用-P选项
下载:
# scp [选项] 远程用户名@远程服务器的IP地址:远程文件路径 本地文件存储路径 -r : 递归上传,主要针对文件夹 -P : 更换了SSH服务的默认端口必须使用-P选项
2、踢出用户
# 查看当前在线用户 w # 踢出某个账号 pkill -kill -t pts/1
四、SSH免密登录解决方案
1、为什么需要免密登录

2、SSH认证原理(基于用户名密码+基于密钥对)
① 回顾基于用户名密码的认证方式

② 基于密钥对(公钥与私钥)的认证方式 => 免密登录

A主机 => JumpServer,B主机 => RealServer
第一步:在A主机(JumpServer)生成一个密钥对(公钥和私钥)
第二步:把A主机的公钥通过网络拷贝到B主机(RealServer)上,然后把其内容追加到B主机的~/.ssh/authorized_keys
第三步:由A主机(JumpServer)向B主机(RealServer)发起登录请求,然后直接在B主机上进行公钥比对(判断A主机的公钥是否已经存储在B主机的authorized_keys文件中),如果存在且正确,则生成一个随机的字符串(如itcast),然后使用A主机的公钥对其加密得到加密的后字符串(如dXdh,34njasz!z.)
第四步:通过网络,由B主机讲刚才生成的加密后的字符串传输给主机A,主机A接收到加密后的字符串以后,使用自己本地存储的私钥进行解密操作(得到itcast)
第五步:把解密得到的itcast发送到B主机,然后验证与刚才生成的字符串是否一致,如果一致,返回登录成功。反之,则返回登录失败。
到此免密登录全部完成!
3、SSH免密登录的具体实现
SSH免密的实现思路一共分为三个步骤(三步走)
第一步:在A主机针对某个账号(tom或jerry)生成公钥与私钥
第二步:使用某些方法把公钥发送到B主机中,然后追加到authorized_keys文件中
第三步:测试是否实现免密登录
☆ 方法一:比较常用(tom)
① 在A主机针对某个账号生成公钥与私钥
# ssh-keygen

注:如果不想一路确认,可以在ssh-keygen -P "",直接生成公私钥
② 使用ssh-copy-id把公钥文件中的内容传输到服务器端的~/.ssh/authorized_keys文件中
# ssh-copy-id -p 3712 code@11.1.1.100 code@11.1.1.100's password:123456
③ 在JumpServer客户端测试免密登录是否成功
# ssh -p 3721 code@11.1.1.100
☆ 方法二:集群常用(jerry)
① 生成公钥与私钥
# ssh-keygen
② 把id_rsa.pub文件,scp到RealServer服务器端
# scp -P 3721 ~/.ssh/id_rsa.pub code@11.1.1.100:/home/code/
③ 在RealServer服务器端,把id_rsa.pub文件中的内容追加到~/.ssh/authorized_keys文件中
# cd ~ # cat id_rsa.pub >> ~/.ssh/authorized_keys
注意事项:以上配置也比较简单,但是实际应用时要注意文件的权限
RealServer: ~/.ssh : 700 ~/.ssh/authorized_keys : 600
④ 测试免密是否成功
# ssh -p 3721 code@11.1.1.100
相关文章:
远程管理SSH服务
一、搭建SSH服务 1、关闭防火墙与SELinux # 关闭firewalld防火墙 # 临时关闭 systemctl stop firewalld # 关闭开机自启动 systemctl disable firewalld # 关闭selinux # 临时关闭 setenforce 0 # 修改配置文件 永久关闭 vim /etc/selinux/config SELINUXdisabled 2、配置…...
Linux 实现原理 — NUMA 多核架构中的多线程调度开销与性能优化
前言 NOTE:本文中所指 “线程” 均为可执行调度单元 Kernel Thread。 NUMA 体系结构 NUMA(Non-Uniform Memory Access,非一致性存储器访问)的设计理念是将 CPU 和 Main Memory 进行分区自治(Local NUMA node&#x…...
Oracle锁处理
背景: 随着数据库版本不断迭代更新, v$session 视图的内容越来越丰富,可以直接使用blocking_session、blocking_instance、final_blocking_instance和final_blocking_session字段进行定位。对于锁层次的排查可以重复查询v$session来确定&am…...
持续集成交付CICD:安装Jenkins Slave(从节点)
目录 一、实验 1.安装Jenkins Slave(从节点) 二、问题 1.salve节点启动jenkins报错 2.终止命令行后jenkins从节点状态不在线 一、实验 1.安装Jenkins Slave(从节点) (1)查看jenkins版本 Version 2.…...
Dart(一):Dart入门
Dart入门 Dart安装创建项目安装依赖(以http为例)依赖库查询地址添加依赖编写运行示例 dart常用命令引用核心库、自定义库、第三方库数据类型Numbers (int, double)Strings (String)Booleans (bool)Lists (List)Maps (Map)Sets (Set)Null (null)Records (…...
[动态规划] (十一) 简单多状态 LeetCode 面试题17.16.按摩师 和 198.打家劫舍
[动态规划] (十一) 简单多状态: LeetCode 面试题17.16.按摩师 和 198.打家劫舍 文章目录 [动态规划] (十一) 简单多状态: LeetCode 面试题17.16.按摩师 和 198.打家劫舍题目分析题目解析状态表示状态转移方程初始化和填表顺序 代码实现按摩师打家劫舍 总结 注:本题与…...
【EI会议投稿】第三届计算机、人工智能与控制工程国际学术会议 (CAICE 2024)
The 3rd International Conference on Computer, Artificial Intelligence and Control Engineering (CAICE 2024) 第三届计算机、人工智能与控制工程国际学术会议 第三届计算机、人工智能与控制工程国际学术会议(CAICE 2024)将于2024年1月26-28日在西…...
python 之 列表推导式
文章目录 基本结构示例 1:将列表中的元素乘以 2 添加条件判断示例 2:筛选出偶数并加倍 嵌套列表推导式示例 3:生成九九乘法表 使用条件表达式示例 4:根据条件返回不同的值 镶嵌使用详细介绍基本结构示例生成二维数组多重筛选和操作…...
【左程云算法全讲2】链表、栈、队列、递归、哈希表和有序表
系列综述: 💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于左程云算法课程进行的,每个知识点的修正和深入主要参考…...
SQL第三次上机作业
1.查询与王利就读同一专业学生的借书证号和姓名 SELECT Lno,Rname FROM Reader WHERE Dept(SELECT DeptFROM ReaderWHERE Rname王利)2.查询比希望出版社出版的所有图书价格都高的图书信息 SELECT * FROM Book WHERE Price>(SELECT MAX(Price)FROM BookWHERE Press希望出版…...
前端事件案例补充
目录 定时器示例 搜索框示例 省市联动 定时器示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><meta name"viewport" content"widthdevice-width, init…...
3.8 Android eBPF HelloWorld调试(二)
写在前面 我们开发eBPF程序的初衷就是再不改动内核的情况下,将内核监控数据传递给到用户态;像应用进程开发一样开发内核监控程序。 Android开机的时候eBPF程序被加载器加载到内核中,但此时它并没有被附加到内核函数上去,也就是ebpf程序并不会执行,我们可以理解为,它仅仅被…...
xss如何快速提取cookies
<script>alert(111)</script> <img srcx onerroralert(document.cookie)>测试一下baidu的xss <script>alert(111)</script><img srcx οnerrοralert(document.cookie)>...
在 ASP.NET C# 中用Aspose.PDF将 PDF 页面转换为 JPG 图像
PDF 是一种通用格式,通常用于打印和共享文档。 (一)C# PDF to JPG Converter API - 免费下载 Aspose.PDF for .NET是一个强大的 PDF 操作 API,可让您在 .NET 应用程序中创建和处理 PDF 文件。此外,它还允许您将 PDF 文…...
Docker Compose安装milvus向量数据库单机版-milvus基本操作
目录 安装Ubuntu 22.04 LTS在power shell启动milvus容器安装docker desktop下载yaml文件启动milvus容器Milvus管理软件Attu python连接milvus配置下载wget示例导入必要的模块和类与Milvus数据库建立连接创建名为"hello_milvus"的Milvus数据表插入数据创建索引基于向量…...
极致性能优化:前端SSR渲染利器Qwik.js | 京东云技术团队
引言 前端性能已成为网站和应用成功的关键要素之一。用户期望快速加载的页面和流畅的交互,而前端框架的选择对于实现这些目标至关重要。然而,传统的前端框架在某些情况下可能面临性能挑战且存在技术壁垒。 在这个充满挑战的背景下,我们引入…...
ES6~ES13新特性(二)
文章目录 一、ES71.Array Includes2.指数exponentiation运算符 二、ES81.Object values2.Object entries3.String Padding4.Trailing Commas5.Object Descriptors 三、ES9四、ES101.flat flatMap2.Object fromEntries3.trimStart、trimEnd4.其他知识点 五、ES111.BigInt2.Nulli…...
soildwork2022怎么样添加螺纹孔?
1.退出草图模式,点击需要添加螺纹孔的物体面,选中“特征”中的“异形孔向导” 2.选中“孔类型”为“直螺纹孔”,“标准”,“类型”,“孔规格”终止条件等。 3.设置完之后选择“位置” 4.鼠标左键在物体面上点一下&…...
【t5 pytorch版源码学习】t5-pegasus-pytorch源码学习
0. 项目来源 中文生成式预训练模型,以mT5为基础架构和初始权重,通过类似PEGASUS的方式进行预训练。 bert4keras版:t5-pegasus pytorch版:t5-pegasus-pytorch 本次主要学习pytorch版的代码解读。 项目结构: train…...
【springboot】spring的Aop结合Redis实现对短信接口的限流
前言 场景: 为了限制短信验证码接口的访问次数,防止被刷,结合Aop和redis根据用户ip对用户限流 1.准备工作 首先我们创建一个 Spring Boot 工程,引入 Web 和 Redis 依赖,同时考虑到接口限流一般是通过注解来标记,而注解…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...
篇章一 论坛系统——前置知识
目录 1.软件开发 1.1 软件的生命周期 1.2 面向对象 1.3 CS、BS架构 1.CS架构编辑 2.BS架构 1.4 软件需求 1.需求分类 2.需求获取 1.5 需求分析 1. 工作内容 1.6 面向对象分析 1.OOA的任务 2.统一建模语言UML 3. 用例模型 3.1 用例图的元素 3.2 建立用例模型 …...
基于django+vue的健身房管理系统-vue
开发语言:Python框架:djangoPython版本:python3.8数据库:mysql 5.7数据库工具:Navicat12开发软件:PyCharm 系统展示 会员信息管理 员工信息管理 会员卡类型管理 健身项目管理 会员卡管理 摘要 健身房管理…...
【向量库】Weaviate概述与架构解析
文章目录 一、什么是weaviate二、High-Level Architecture1. Core Components2. Storage Layer3. 组件交互流程 三、核心组件1. API Layer2. Schema Management3. Vector Indexing3.1. 查询原理3.2. 左侧:Search Process(搜索流程)3.3. 右侧&…...
