当前位置: 首页 > news >正文

系统运维Day01_SSH服务

目录

1. SSH基本概念

2. SSH工作原理

3. SSH配置实战

3.1 安装SSH服务并配置

3.1.1 检查SSH服务是否安装

3.1.2 安装SSH服务

3.1.3 启动SSH相关服务

3.2 如何配置SSH免密登录

3.2.1 在node1中生成密钥对

3.2.2 发送公钥到master节点

3.2.3 在master通过ssh命令连接node1,尝试是否可以免密码访问成功

4. 基于SSH实现发送命令到远程服务器

5. 基于SSH进行免密数据传输

6. 综合案例

7. 【实战】基于Ubuntu完成SSH服务配置


1. SSH基本概念

        SSH(Secure Shell,安全外壳)是一种网络安全协议,旨在通过加密和认证机制实现安全的远程访问文件传输等业务。

        SSH支持多种身份验证方法,包括密码认证密钥认证。密码认证是将用户名和密码发送给服务器进行认证,【重要】而密钥认证则使用公钥私钥对进行身份验证,实现安全的免密登录。

公钥:
    公钥是可以公开分享的密钥,用于加密信息和验证数字签名。
    公钥需要被放置在远程服务器上用户账号的~/.ssh/authorized_keys文件中。

私钥:
    私钥是必须保密的密钥,用于解密信息和创建数字签名。
    私钥保存在客户端,通常位于用户主目录下的隐藏文件夹中,如~/.ssh/id_rsa。

注意:私钥非常重要,不能泄露或分享给其他人。一旦私钥被泄露,任何人都可以使用它来冒充你进行SSH连接。

2. SSH工作原理

  • 基本流程

1- 密钥对生成:

        1. 用户在本地机器上使用ssh-keygen命令生成一对密钥,即公钥和私钥。
        2. 私钥必须保密,并存储在本地机器的~/.ssh/id_rsa文件中(或其他用户指定的位置)。
        3. 公钥则可以公开,并存储在本地机器的~/.ssh/id_rsa.pub文件中。

2- 公钥分发:
        1. 用户需要将生成的公钥文件(id_rsa.pub)的内容复制到远程服务器的~/.ssh/authorized_keys文件中。
        2. 这通常通过使用ssh-copy-id命令或其他安全方式完成。
3- 身份验证过程:
  1. 当用户尝试通过SSH登录到远程服务器时,SSH客户端会向远程服务器发起连接请求。
  2. 远程服务器接收到连接请求后,会生成一个随机字符串(称为“挑战”),并使用用户的公钥对其进行加密,然后将加密后的字符串发送给客户端。
  3. 客户端接收到加密后的字符串后,使用本地存储的私钥对其进行解密,得到原始的随机字符串。
  4. 客户端将解密后的随机字符串发送回远程服务器。
  5. 远程服务器接收到客户端发送的解密后的字符串后,会与之前生成的随机字符串进行比对。如果两者一致,说明客户端拥有与公钥对应的私钥,验证通过,允许用户登录。

3. SSH配置实战

3.1 安装SSH服务并配置

3.1.1 检查SSH服务是否安装

ssh -V : 检查SSH客户端版本,如果安装会显示版本信息

systemctl status sshd: 检查SSH服务状态,如果服务正在运行则说明已安装SSH服务器

如果提示: command not found或类似的, 说明SSH服务未安装, 需要安装服务

3.1.2 安装SSH服务

dnf install -y openssh-server 
dnf install -y openssh-clients

请注意,CentOS Stream 9使用的是dnf包管理器,而不是CentOS中的yum。因此,在安装软件包时,应使用dnf命令。

3.1.3 启动SSH相关服务

systemctl start sshd   # -- 启动服务
systemctl enable sshd  # -- 将服务添加到自启动项,下次开机就自动启动了

关于SSH配置文档相关参数:

        SSH配置文件所在路径:/etc/ssh/sshd_config

vi /etc/ssh/sshd_config

核心配置说明:
        Port: 指定SSH服务监听的端口号,默认为22,可以修改为其他端口以增强安全性
        PermitRootLogin: 控制是否允许root用户通过SSH登录,建议设置为no以提高安全性
        PasswordAuthentication: 控制是否允许使用密码进行认证,如果启用了密钥认证,可以将其设置为no
       ChallengeResponseAuthentication 和UsePAM: 通常与密码认证相关,如果禁用了密码认证,可以将其设置为no
        AllowUsers 和 DenyUsers: 分别指定允许和拒绝通过SSH登录的用户列表


如果修改了相关配置, 需要重新加载SSH服务配置,使其生效:
        命令: systemctl reload sshd

3.2 如何配置SSH免密登录

3.2.1 在node1中生成密钥对

场景说明: 目前有node1和master二台服务器,需要实现master访问node1时,可以免密访问

master IP:192.168.132.100

node1 IP:192.168.132.101

ssh-keygen -f ~/.ssh/id_rsa -P '' -q说明:
-f : 指定私钥文件的保存位置 (默认为 ~/.ssh/id_rsa )
-P : 指定设置私钥的密码 (一般为空,不设置)
-q : 表示静默执行,此时大部分的信息不回显示,仅必要信息才会输出

3.2.2 发送公钥到master节点

ssh-copy-id 192.168.132.101

需要输入密码,由于此时免密配置未完成,人需要输入密码使用

如果不希望提示是否继续连接

ssh-copy-id -o StrictHostKeyChecking=no 192.168.132.101

在node1节点,查看是否发送成功

默认位置: ~/.ssh/authorized_keys

3.2.3 在master通过ssh命令连接node1,尝试是否可以免密码访问成功

ssh 192.168.132.101
或者
ssh root@192.168.132.101

说明:root@192.168.88.101
格式:用户名@连接主机
如果省略了用户名,默认使用当前服务器所登录的用户来连接目标服务器

直接连接成功,不需要任何密码

思考:当前如果node1访问master是否可以呢?

需要输入密码,无法直接访问

场景一:完成node1免密访问master

ssh-keygen -f ~/.ssh/id_rsa -P '' -q
ssh-copy-id -o StrictHostKeyChecking=no 192.168.132.100
ssh root@192.168.132.100

完成免密登录

场景二(尝试):通过SSH访问自己,观察现象

原因: 因为并没有把公钥信息添加到自己节点中专门用于放置公钥的授权文件中

操作:在node1执行, 将公钥发送到自己的授权文件中
ssh-copy-id 192.168.132.101

操作:在master执行, 将公钥发送到自己的授权文件中
ssh-copy-id 192.168.132.100

4. 基于SSH实现发送命令到远程服务器

        SSH远程执行命令是通过SSH协议连接到远程服务器,并在远程服务器上执行指定的命令或脚本,而无需直接登录到服务器的终端。

有什么价值呢?

  1. 高效管理:无需登录每台服务器,即可快速执行命令,特别适合管理多台服务器。
  2. 自动化运维:结合脚本或工具,实现批量操作、定时任务和自动化部署。
  3. 快速故障排查:实时查看日志、监控状态,快速定位和解决问题。
  4. 安全性:通过加密通信执行命令,避免敏感信息泄露。
  5. 节省时间:无需物理接触服务器,即可完成维护任务,特别适合分布式或云环境。

基本语法

ssh [选项] username@remote_host "command [&]"

说明:
username:远程服务器的用户名。
remote_host:远程服务器的IP地址或域名。
command:要在远程服务器上执行的命令

& : 异步执行, 在远程服务器后台运行, SSH不会等待命令完成,会立即返回并关闭连接

选项:
-t: 如果远程命令需要交互式终端(例如 sudo 命令),可以使用 -t 选项
-p: 如果远程服务器的SSH服务运行在非默认端口(默认是22),可以使用 -p 选项指定端口
-o: 使用 -o 选项来指定SSH配置选项,例如禁用主机密钥检查(StrictHostKeyChecking=no)
-A: 需要转发认证代理连接(例如使用SSH密钥进行跳板机连接),可以使用 -A 选项

相关操作

需求一: 在master中远程查看node1的主机名
ssh root@192.168.132.101 "hostname"

需求二: 在node1中,远程执行进入root用户家目录,并在此目录下创建 a.txt文件
说明:如果是执行多个命令,可以使用分号 或 && 来分隔命令
    分号: 仅分隔命令, 不管前面得命令是否执行成功, 后面的命令依然会执行
    && : 将多个命令合并为一个命令, 前面得命令如果执行失败, 后面的命令就无法执行

ssh root@192.168.132.101 "cd ~ && touch a.txt"

5. 基于SSH进行免密数据传输

        SCP(Secure Copy Protocol)是基于 SSH 协议的安全文件传输工具,可用于在本地和远程服务器之间传输文件或目录。通过 SCP,数据在传输过程中会被加密,确保安全性。

SCP的基本语法结构:

Properties
scp [选项] [源文件路径] [目标路径]

源文件路径:本地文件或远程服务器上的文件。
目标路径:本地路径或远程服务器上的路径。

常用选项:
-r        递归复制整个目录(传输目录时必用)
-P        指定 SSH 连接的端口号(默认是 22)
-i        指定 SSH 使用的私钥文件(用于免密登录)
-q        静默模式,不显示进度条和调试信息
-C        开启压缩传输,提高传输速度(适合大文件或低速网络)
-l        限制传输速度(单位为 Kbit/s,例如 -l 1000 表示限制为 1Mbps)

SCP的基本用法:

1. 从本地传输到远程
    scp /local/path/file.txt user@remote:/remote/path/


2. 从远程传输到本地
    scp user@remote:/remote/path/file.txt /local/path/

3. 递归传输整个目录
    scp -r /local/path/dir user@remote:/remote/path/

相关案例:

1- 在master /root目录下,构建 ssh_test目录,并在此目录下创建a.txt b.txt文件,向文件中随机添加一些数据
cd ~
mkdir -p ./ssh_test
cd /root/ssh_test
touch a.txt b.txt
echo "a.txt 11111111" > a.txt
echo "b.txt 2222222" > b.txt

2- 通过SCP命令, 在master完成将该目录拷贝到node1的 / 目录下
scp -r /root/ssh_test/ root@192.168.132.101:/

3- 通过SCP命令, 在node1的家目录完成将远端/root/ssh_test/a.txt 拷贝到当前目录操作
cd ~
scp root@192.168.132.100:/root/ssh_test/a.txt ./


6. 综合案例

要求, 在master节点中安装JDK, 完成安装后, 基于SCP快速完成node1节点的JDK安装操作

  • 第一步: 完成在master安装JDK
以下操作均在master节点执行:
# 1- 创建目录 并切换至目录下
mkdir -p /export/software
cd /export/software# 2- 上传JDK的压缩包
使用 mx工具, 将提供jdk的安装包上传到/export/software# 3- 解压JDK压缩包
cd /export/software
tar -xzf jdk-8u241-linux-x64.tar.gz -C /opt# 4- 验证是否ok
cd /opt/jdk1.8.0_241/bin./java -version
./javac测试是否正常, 正常是可以看到jdk1.8版本的字样, 同时javac执行也可以看到一些相关的参数提示
# 5- 配置环境变量
vim /etc/profile输入G,跳转文件末尾, 然后输入o 在下一行输入内容#将以下内容,包含注释, 全部拷贝到文件中
# JAVA_HOME
export JAVA_HOME=/opt/jdk1.8.0_241
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH按下ecs键, 输入 :x 保存退出# 6- 最后,执行重新加载配置文件
source /etc/profile最终校验: 在任意的路径下执行
java -version
javac测试是否正常, 正常是可以看到jdk1.8版本的字样, 同时javac执行也可以看到一些相关的参数提示
额外注意:关于在修改环境变量的时候, 请注意, java的路径地址是否正确, 需要校验
  • 第二步:通过scp命令 快速完成node1的JDK安装操作
在master执行:
cd /opt
scp -r jdk1.8.0_241/ root@192.168.132.101:$PWD说明: $PWD 常量值  表示当前所在的路径所以上述的命令等同于:  scp -r jdk1.8.0_241/ root@192.168.132.101:/optscp /etc/profile root@192.168.132.101:/etc/在node1执行:
source /etc/profile测试:在任意的路径下执行
java -version
javac测试是否正常, 正常是可以看到jdk1.8版本的字样, 同时javac执行也可以看到一些相关的参数提示

7. 【实战】基于Ubuntu完成SSH服务配置

        需求:node1(centos stream)、node2(centos stream)、Ubuntu Server01(Ubuntu)之间的SSH免密配置操作

        要求:分别为node1和node2构建itheima用户,设置密码为123456,然后三台服务器全部基于此账号完成SSH配置操作

第一步: 需要让三个服务器全部都使用itheima用户登录服务器
1.1 开启三台服务器(node1 node2  ubuntu server)
1.2 node1和node2在默认情况下,只有root用户, 没有其他用户, 此时需要先创建用户
        1.2.1:node1和node2先使用root用户登录执行以下命令
                useradd itheima
                passwd itheima
                设置密码为:123456
                设置完成后, 使用su命令,测试使用可以正常切换至itheima
        1.2.2 在MX工具上, 将原有二个会话关闭, 然后创建新的使用itheima账号的会话窗口,同时使用itheima连接Ubuntu server

第二步: 需要让三台服务器都要配置免密操作
        分析:
                node1 连接 node1 node2 Ubuntu 不需要输入密码
                node2 连接 node1 node2 Ubuntu 不需要输入密码
                Ubuntu 连接 node1 node2 Ubuntu 不需要输入密码
        发现, 每一个节点都要连接三个服务器节点, 意味每个节点都应该有三个节点公钥
    
        结论: 只需要让每一个节点都拥有三个节点公钥信息即可
    
2.1 三个节点统一生成在itheima账号下, 生成公钥和私钥
# 三个节点都要执行
ssh-keygen -f ~/.ssh/id_rsa -P '' -q

2.2 校验每个节点的itheima用户下的.ssh目录中是否已经有了公钥和私钥
# 三个节点
ll ~/.ssh

Properties
2.3 将自己的公钥发送给三个节点:
# 以下命令三个节点都要执行【一行一行执行】
ssh-copy-id 192.168.132.100
ssh-copy-id 192.168.132.101
ssh-copy-id 192.168.132.130


2.4 校验: 查看每个节点公钥授权文件, 观察是否有三个节点的公钥
# 以下命令三个节点都要执行
cat ~/.ssh/authorized_keys

最后, 依次通过: ssh 主机地址 连接各个服务器, 观察是否需要输入密码
建议方案, 一个节点 一个节点依次测试, 确保不漏测

以node1为例:
ssh 192.168.132.100
通过exit退回 --> node1
ssh 192.168.132.101
通过exit退回 --> node1
ssh 192.168.132.130
通过exit退回 --> node1

如何恢复原状呢?

方式一: 全部使用快照, 直接恢复为初始化状态(centos stream) 【解决根本问题】

方式二: 删除所有用户下的 .ssh目录

rm -rf ~/.ssh   【Ubuntu server适用,其他服务器也可以使用, 但是建议直接快照方式】

http://www.dtcms.com/a/578871.html

相关文章:

  • 长沙企业网站建设优度wordpress英文
  • 一二三线协同 | IT运维系统如何实现问题处理的高效闭环
  • 建设银行淮安招聘网站阿里云网站建设官方自营店
  • 做外贸在那些网站找业务增城网站开发
  • 【HarmonyOS-App发布】
  • 建网站的费用是多少钱旅游电子商务网站建设的流程
  • JVM(Java Virtual Machine)
  • css全局样式初始化
  • 产品类网站手机怎么下载网页上的视频
  • linux一次性批量更新文件时间戳
  • 阿里云服务器可以做下载类网站吗整容网站模板
  • 萤石开放平台控制台视频直播(原播放地址)操作指南
  • 【stm32简单外设篇】- HC-SR501 / 人体红外被动红外传感器
  • 电子商务网站开发的关键点沈阳建设工程交易网官网
  • 无锡网站建设哪家公司好做网站和app多少费用
  • 登录建设厅网站的是企业锁吗h5制作软件app手机版
  • PLM系统集成3D一览通,实现PLM系统内3D看图与设计评审协同数字化
  • 旅游网站代码html电子产品网站模板
  • 网站收录后才可以做排名吗WordPress打开有广告
  • 构建可靠的 AI 工作流:我们在 MCP 架构下的实践与经验
  • 云端做效果图的网站快站优惠券去哪里找
  • 机器学习日报13
  • 潍坊网站设计公司电视剧在线观看免费影视网站
  • 福建省武夷山市城乡建设网站汉中专业网站建设服务
  • 东城网站开发公司精准营销平台
  • 定义一个能接受可选参数的元类:Python高级元编程指南
  • 公司网站建设的目的做iframe跳转怎么自适应网站
  • 同性恋色做视频网站有哪些广州品牌网站建设
  • 免费的网站模板有哪些网站增加新闻功能
  • 模板云网站建设哪些属于网站评论