远程管理SSH服务的搭建

article/2025/8/13 12:21:50

  

                              

一、搭建SSH服务

1、关闭防火墙与SELinux

# 关闭firewalld防火墙
# 临时关闭
systemctl stop firewalld
# 关闭开机自启动
systemctl disable firewalld# 关闭selinux
# 临时关闭
setenforce 0
# 修改配置文件  永久关闭
vim /etc/selinux/config
SELINUX=disabled

2、配置yum源

该步骤我们我们已经在前面的博客中有讲到。因此在这里不在赘述。

详细步骤请参考:
本地yum源的配置详解https://blog.csdn.net/2302_79546368/article/details/146285768?fromshare=blogdetail&sharetype=blogdetail&sharerId=146285768&sharerefer=PC&sharesource=2302_79546368&sharefrom=from_link

网络yum源的配置https://blog.csdn.net/2302_79546368/article/details/145029775?fromshare=blogdetail&sharetype=blogdetail&sharerId=145029775&sharerefer=PC&sharesource=2302_79546368&sharefrom=from_link

3、openssh软件的安装

SSH服务底层的软件名称叫做openssh,open开源,ssh就是ssh服务。openssh属于C/S架构软件,其拥有客户端与服务器端。

  • 客户端:ssh
  • 服务端:openssh-server

 检查openssh是否安装成功

# rpm -qa |grep openssh 或 yum list installed |grep openssh

基于yum安装

# yum install openssh -y

获取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; # yes or no,默认为yes 代表允许通过root账号远程登录此服务器
# vim /etc/ssh/sshd_config
38行 PermitRootLogin no
  • 更改SSH默认端口
# vim /etc/ssh/sshd_config
17行 Port 1314
  •  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客户端的配置文件

# vim /etc/ssh/ssh_config
StrictHostKeyChecking no
  • 限制ssh监听的IP

这个适用于服务器有多个IP,这样我们就可以只监听内网IP,这样就只能用在同一个局域网的机器去 连接,而我们只需要让在同一个服务器的另网卡的IP监听在外网.

vim /etc/ssh/sshd_config
ListenAddress 192.168.17.14
  • 禁止使用密码登录
vim /etc/ssh/sshd_config
PasswordAuthentication yes

        而我们需要传公钥就得要密码这是很矛盾的,所以需要我们提前把公钥传给服务器,或者临时开启 密码登录,然后就能实现登录了。 在企业内部,基本都会将公钥在装机的时候,就直接通过注入的方式如cloud-init,直接进行注入。

  • 补充
PermitRootLogin no             // 禁止root用户登录
PermitEmptyPasswords no   // 禁止空密码用户登录 一旦启用了PermitEmptyPasswords yes,那么所有无密码的用户也就可以远程登录了,并且还是免密码的方式。
LoginGraceTime 2m             // 登录验证时间为2分钟
MaxAuthTries 6                   // 最大重试次数6次
AllowUsers steven               // 只允许steven用户登录
DenyUsers steven               // 不允许登录用户 steven
MaxSessions                   // 最大终端会话个数
1 PasswordAuthentication  yes       //启用密码验证
2 PubkeyAuthentication    yes         //启用密匙验证
3 AuthorsizedKeysFile .ssh/authorized_keys //指定公钥数据库文件

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

6、专业工具pwgen生成用户密码

在实际生产环境中,其用户密码一定不要手工设置,建议使用专业的密码生成工具如pwgen。

配置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系统之间进行文件的传输(上传、下载)

选项:

  • -r : 递归上传,主要针对文件夹
  • -P : 更换了SSH服务的默认端口必须使用-P选项
  • -p:表示在拷贝前后保持文件或目录属性

上传(push):

# scp [选项] 本地文件路径 远程用户名@远程服务器的IP地址:远程文件存储路径

下载(pull):

# scp [选项] 远程用户名@远程服务器的IP地址:远程文件路径 本地文件存储路径

2、踢出用户

# 查看当前在线用户
w
# 踢出某个账号
pkill -kill -t pts/1

三、SSH免密登录解决方案

1、为什么需要免密登录?

  • 提高效率:避免频繁输入密码,特别是在需要频繁连接多台服务器时。
  • 安全性:使用 SSH 密钥对可以比密码提供更强的安全保障。
  • 自动化:便于自动化脚本和 CI/CD 流程的无干预执行。
  • 减少错误:减少因手动输入密码导致的错误。

总的来说,SSH 免密登录通过提高操作便捷性和安全性,优化了服务器管理的流程。

2、SSH认证原理(基于用户名密码+基于密钥对)

① 回顾基于用户名密码的认证方式(ssh的访问过程)

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

A主机JumpServer,B主机 ealServer

  • 第一步:在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文件中
  • 第三步:测试是否实现免密登录

☆ 方法一:比较常用

① 在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到服务器端(也可以使用rsync,后面我们会讲到)

# scp -P 3721 ~/.ssh/id_rsa.pub code@11.1.1.100:/home/code/

③ 在服务器端,把id_rsa.pub文件中的内容追加到~/.ssh/authorized_keys文件中

# cd ~
# cat id_rsa.pub >> ~/.ssh/authorized_keys

> 注意事项:实际应用时要注意文件的权限

~/.ssh : 700
~/.ssh/authorized_keys : 600  保存已授权的客户端公钥
~/.ssh/id_rsa   :600  
~/.ssh/id_rsa.pub   :644 known_hosts:保存已认证的远程主机公钥

④ 测试免密是否成功

# ssh -p 3721 code@11.1.1.100

 本   篇   完   结   …  …


持     续     更     新     中   …    … 


http://www.hkcw.cn/article/CRBdQJmNsq.shtml

相关文章

Cesium快速入门到精通系列教程二

一、添加地形与添加自定义地形 在 Cesium 1.93 中添加地形可以通过配置terrainProvider实现。Cesium 支持多种地形数据源,包括 Cesium Ion 提供的全球地形、自定义地形服务以及开源地形数据。下面介绍几种常见的添加地形的方法: 使用 Cesium Ion 全球地…

基于FashionMnist数据集的自监督学习(生成式自监督学习VAE算法)

目录 一,VAE 1.1 VAE的简介 1.2 VAE的核心思想 1.3 VAE的结构 1.4 VAE的工作原理 1.5 VAE 与传统自动编码器(AE)的区别 1.6 VAE 的应用场景 二,代码逻辑分析 2.1 整体逻辑 2.2 VAE模型 2.3 训练策略与优化 2.4 自适应学…

ESP32基础知识1:项目工程建立和烧录

ESP32基础知识1:项目工程建立和烧录 一、本文内容与前置知识点1. 本文内容2. 前置知识点 二、新建工程1. 工程配置2. 依照模板建立项目 三、硬件烧录1. 硬件准备2. 烧录器和ESP32连接3. 电脑端设置4. 烧录成功演示 四、参考文献 一、本文内容与前置知识点 1. 本文内…

duilib图片属性中corner属性九宫格拉伸说明

在duilib中,图片设置里有corner属性,类似于android系统里的九宫格,对应的分区域拉伸被称为九宫格拉伸。设置corner属性后,将区域分成3x3的九个区域,如下所示: 除了4个拐角区域不拉伸,其余5个区域…

《操作系统真相还原》——进入内核

ELF 按书上的操作来,在现代操作平台编译链接默认生成elf64 格式的文件, 很显然程序头位置发生变化,因为定义elf 结构的类型中有64位,所以我们需要将编译链接出32位格式的 gcc -m32 -c -o main.o main.c ld -m elf_i386 main.o …

笔试笔记(运维)

(数据库,SQL) limit1 随机返回其中一个聚合函数不可以嵌套使用 【^】这个里面的数据任何形式组合都没有 sql常用语句顺序:from-->where-->group by-->having-->select-->order by-->limit 只要其中一个表存在匹…

医疗数理范式化:从范式迁移到认知革命的深度解析

引言 在当代医疗领域,数理思维已经从辅助工具逐渐发展成为核心决策支持系统的关键组成部分。随着数字技术的迅猛发展,医疗行业正经历着前所未有的变革,而数理思维作为这一变革的核心驱动力,正在深刻重塑医疗实践的方方面面。数理思维在医疗领域的应用,本质上是将抽象的数…

golang -- slice 底层逻辑

目录 一、前言二、结构三、创建3.1 根据 make创建3.2 通过数组创建 四、内置append追加元素4.1 追加元素4.2 是否扩容4.2.1 不扩容4.2.2 扩容 总结 一、前言 前段时间学了go语言基础,过了一遍之后还是差很多,所以又结合几篇不同资料重新学习了一下相关…

Fashion-MNIST LeNet训练

前面使用线性神经网络softmax 和 多层感知机进行图像分类,本次我们使用LeNet 卷积神经网络进行 训练,期望能捕捉到图像中的图像结构信息,提高识别精度: import torch import torchvision from torchvision import transforms f…

数据库系统概论(十)SQL 嵌套查询 超详细讲解(附带例题表格对比带你一步步掌握)

数据库系统概论(十)SQL 嵌套查询 超详细讲解(附带例题表格对比带你一步步掌握) 前言一、什么是嵌套查询?1. 基础组成:查询块2. 嵌套的两种常见位置(1)藏在 FROM 子句里(当…

Azure 机器学习初学者指南

Azure 机器学习初学者指南 在我们的初学者指南中探索Azure机器学习,了解如何设置、部署模型以及在Azure生态系统中使用AutoML & ML Studio。Azure 机器学习 (Azure ML) 是一项全面的云服务,专为机器学习项目生命周期而设计&am…

使用win11圆角指针教程

一.准备文件 win11圆角指针下载链接:https://wwxh.lanzoum.com/iwsZH2xqmy0d 密码:em 二.开始安装 1.将下载的压缩包解压(随便存哪,最后可以删掉) 右键,点击“全部解压缩” 点击“提取” 2.安装 选…

day16 leetcode-hot100-30(链表9)

24. 两两交换链表中的节点 - 力扣(LeetCode) 1.模拟法 思路 模拟题目要求进行两两交换,但有一点需要注意,比如交换3与4后,1仍然指的是3,这是不正确的,所以1指针的next也需要修改,所…

C语言进阶--程序的编译(预处理动作)+链接

1.程序的翻译环境和执行环境 在ANSI C标准的任何一种实现中,存在两种不同的环境。 第一种是翻译环境:将源代码转换为可执行的机器指令(0/1); 第二种是执行环境:用于实际执行代码。 2.详解编译链接 2.1翻译环境 程…

GCA解码大脑因果网络

格兰杰因果分析(Granger Causality Analysis,GCA) 是一种测量脑区之间有效性连接(effective connectivity)的成熟方法。利用多元线性回归分析一个时间序列的过去值是否能正确预测另一个时间序列的当前值,可以用来描述脑…

H5S 大华SDK带图报警类型及热成像报警支持

目前很多应用都希望报警带对应的图片,比如控制中心在弹报警框的时候需要有一张图片让人工更快的做出判断,下面介绍使用大华SDK 的带图报警功能。 大华SDK支持接入设备带图报警,并且支持热成像通道报警,设置订阅事件并吧协议端口设…

(javaSE)Java数组进阶:数组初始化 数组访问 数组中的jvm 空指针异常

数组的基础 什么是数组呢? 数组指的是一种容器,可以用来存储同种数据类型的多个值 数组的初始化 初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程。 数组初始化的两种方式:静态初始化,动态初始化 数组的静态初始化 初始化…

Java数据结构——八大排序

排序 插⼊排序希尔排序直接选择排序堆排序冒泡排序快速排序归并排序计数排序 排序的概念 排序:就是将一串东西,按照要求进行排序,按照递增或递减排序起来 稳定性:就是比如排序中有两个相同的数,如果排序后&#xff0c…

【Linux】Linux文件系统详解

目录 Linux系统简介 Linux常见发行版: Linux/windows文件系统区别 Linux文件系统各个目录用途 Linux系统核心文件 系统核心配置文件 用户与环境配置文件 系统运行与日志文件 Linux文件名颜色含义 Linux文件关键信息解析 🔥个人主页 &#x1f52…

2023年6月6级第一套第一篇

虽然,不重要题干定位到主句信息了,往下走,看强调什么信息看最后一句,优先看主干信息,先找谓语然后找主语和宾语,也是和人有关,后面出现的名词信息是修饰部分,非主干信息不看 A选项&…