【Linux】SSH协议应用

news2024/11/18 8:22:20

SSH协议

    • SSH
      • 简介
      • 实现
        • OpenSSH
      • ssh中的四个文件
      • ~/.ssh文件路径
      • 实验解析


SSH

简介

SSH(secure shell)只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。这里只讨论SSH在Linux Shell中的用法。如果要在Windows系统中使用SSH,会用到另一种软件PuTTY,这需要另文介绍。

💧CSDN@划过手的泪滴t


SSH之所以能够保证安全,原因在于它采用了公钥加密

整个过程是这样的:

(1)远程主机收到用户的登录请求,把自己的公钥发给用户。

(2)用户使用这个公钥,将登录密码加密后,发送回来。

(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

这个过程本身是安全的,

但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。

可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。

再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。

这种风险就是著名的"中间人攻击"(Man-in-the-middle attack)。

实现

OpenSSH

SSH协议有诸多的实现软件,广泛使用的SSH实现软件是OpenSSH。OpenSSH是SSH协议的一种开源实现,现在已经成为Linux、Unix等操作系统的SSH协议默认实现。

ssh中的四个文件

  • id_rsa:私钥
  • id_rsa.pub:公钥
  • known_hosts:存储的是远端主机的公钥
  • authorized_keys:存储的远端主机的公钥

~/.ssh文件路径

~/.ssh是存放SSH客户端相关配置和密钥文件的目录,但是第一次使用ssh的时候这个目录一般是空的,上述的konwn_hosts只有使用了ssh之后才会自动创建,然后其他主机发送公钥至本机之后,本机会生成authorized_keys文件用于存放相关的主机和密钥信息。如果想要对客户端的配置进行修改,也可以在该目录下创建config文件。

执行ssh-keygen命令创建密钥对,

ssh-keygen -t rsa -b 4096

密钥生成后会在当前目录下多出两个文件,id_rsa和id_rsa.pub,其中id_rsa是私钥(敲黑板:这个很重要,不能外泄),id_rsa.pub这个是公钥,把公钥拷贝到需要登录的远程服务器或Linux系统上,这里可以使用ssh-copy-id自动完成,也可以手动追加秘钥到远程服务器。

方法一(推荐):

ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.137

执行命令了会要求输入远程机器的密码,输入密码即可。

注:ssh-copy-id默认端口是22,如果您的SSH端口不是22,也就是远程服务器端口修改成其他的了,那就要得加上 -p +端口。

将上面生成的公钥id_rsa.pub追加到authorized_keys文件中:

cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

密钥准备好了接下来就可以使用密钥登录了,

ssh -i ./id_rsa root@192.168.1.116

实验解析

1、使用scp将d盘中的任意文件夹拷贝到linux中的/opt/a1

scp -r D:\tmp1\ root@192.168.0.137:/opt/a1

在这里插入图片描述

在这里插入图片描述

2、使用scp命令将d盘任意文件夹中以a开头的文件拷贝到linux的/opt/b1中

 scp -r D:\qqdata\313851039\FileRecv\a* root@192.168.0.137:/opt/b1

在这里插入图片描述

3、SSH密钥对登录实验,服务端为linux,客户端一台linux一台windows

ssh-keygen -b 1024 -t rsa
#执行命令的过程中是会提示呢输入密钥的密码

在这里插入图片描述

将生成的公钥以安全的方式传输到要登录的服务器

scp ~/.ssh/id_rsa.pub root@192.168.0.137:~/

Linux服务端

mkdir .ssh
cat id_rsa.pub >> ~/.ssh/authorized_key
chmod 600 /root/.ssh/authorized_keys
vim /etc/ssh/sshd_config
systemctl restart sshd
 ssh -i ./id_rsa.pub root@192.168.0.116

在这里插入图片描述

Windows

在这里插入图片描述

在这里插入图片描述

4、使用tcp-wrapper限制宿主机对服务端的连接

vim /etc/hosts.deny
#追加
sshd:192.168.0.106


在这里插入图片描述

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

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

相关文章

ZYNQ实验--CIC插值滤波器实验

一、CIC滤波器介绍 CIC (Cascaded Integrator-Comb) 滤波器是一种常用的数字信号处理滤波器,主要用于降采样(decimation)和升采样(interpolation)操作。它具有简单的硬件实现、高效的运算速度以及适用于需要快速处理的…

应届生选导师的创业公司,还是去中厂?

点击上方,选择“置顶/星标公众号” 福利干货,第一时间送达 导师是做自动化设备的控制软件,公司做纯软件。导师能给一样的工资,五人左右团队,潜在收入可能要高一些。纠结哪个对今后的发展更好一些。 大家好&#xff0…

【论文阅读笔记】Mamba模型代码理解

0.开源代码地址 官方实现:state-spaces/mamba (github.com) 最简化实现:johnma2006/mamba-minimal: Simple, minimal implementation of the Mamba SSM in one file of PyTorch. (github.com) 直接实现:alxndrTL/mamba.py: A simple and e…

Java 接口提示500,但console并不报错。

因为习惯了C语言printf打印,且当时并不明白try catch意义所在 如图所示,下添加了行号打印 但只打印出了line 89,无line 91,也无报错 所以使用try catch 包裹Sql查询封装函数 e.printStackTrace(); 果真打印出了 查看Entity类&…

【经典算法】LeetCode25:K 个一组翻转链表(Java/C/Python3,Hard)

#算法 目录 题目描述思路及实现方式一:递归思路代码实现Java 版本C 语言版本Python3 版本 复杂度分析 方式二:迭代和原地反转思路代码实现Java 版本C 语言版本Python3 版本 复杂度分析 总结相似题目 标签:链表、递归 题目描述 给你链表的头…

DFS:floodfill算法解决矩阵联通块问题

floodfill,翻译为洪水灌溉,而floodfill算法本质上是为了解决在矩阵中性质相同的联通块问题。 一、图像渲染 . - 力扣(LeetCode) class Solution { public:int dx[4]{0,0,1,-1};int dy[4]{1,-1,0,0};int prev;//记住初始值int m,…

什么是广播系统语言传输指数 STIPA

基础知识 通过广播系统播放一个确定的信号(STIPA 测试信号),再在待测点测量其到达后的质量即可。IEC 60268-16 标准中定义通过单一值表示清晰度结果,0 表示完全无法理解,1 表示完美理解。测量单位是 STI(语…

C#探索之路基础夯实篇(3):面向对象的三大特性和五大原则详解

文章目录 前提:一、特性:二、原则:三、示例1. 单一职责原则 (Single Responsibility Principle, SRP):2. 开放-封闭原则 (Open-Closed Principle, OCP):3. 里氏替换原则 (Liskov Substitution Principle, LSP)&#xf…

移动硬盘能当u盘重装系统吗?做启动数据还能恢复吗

在数字时代,随着技术的不断发展,我们越来越依赖于各种存储设备,其中移动硬盘以其大容量和便携性受到广大用户的青睐。不过,有时我们可能会遇到需要使用U盘来重装系统的情况,而手头又没有合适的U盘。这时,我…

Spring Boot-01-通过一个项目快速入门

官方参考文档:Spring Boot Reference Documentation 0. 概述 Spring的缺点: 1. 配置繁琐:虽然Spring的组件代码是轻量级,但它的配置却是重量级的。 2. 依赖繁琐:项目的依赖管理也是一件耗时耗力的事情。分析要导入哪…

03-JAVA设计模式-工厂模式详解

工厂模式 工厂设计模式是一种创建型设计模式,它提供了一种封装对象创建过程的机制,将对象的创建与使用分离。 这种设计模式允许我们在不修改客户端代码的情况下引入新的对象类型。 在Java中,工厂设计模式主要有三种形式:简单工厂…

【CNN】ConvMixer探究ViT的Patch Embedding: Patches Are All You Need?

Patches Are All You Need? 探究Patch Embedding在ViT上的作用,CNN是否可用该操作提升性能? 论文链接:https://openreview.net/pdf?idTVHS5Y4dNvM 代码链接:https://github.com/tmp-iclr/convmixer 1、摘要 ViT的性能是由于T…

基于Spark中随机森林模型的天气预测系统

基于Spark中随机森林模型的天气预测系统 在这篇文章中,我们将探讨如何使用Apache Spark和随机森林算法来构建一个天气预测系统。该系统将利用历史天气数据,通过机器学习模型预测未来的天气情况,特别是针对是否下雨的二元分类问题。 简介 Ap…

【unity】【C#】延时调用(协程)和场景管理

文章目录 什么是协程协程的应用 - IEnumerator如何控制协程的暂停协程的另一种写法 - Invoke场景管理 多看代码块中的注释 什么是协程 A coroutine alows vou to spreacwhere it left off on the following anc return control toolinencoeframe. 协程允许您将任务分布在多个帧…

Android14应用启动流程(源码+Trace)

1.简介 应用启动过程快的都不需要一秒钟,但这整个过程的执行是比较复杂的,无论是对手机厂商、应用开发来说启动速度也是核心用户体验指标之一,本文采用Android14源码与perfetto工具进行解析。 源码参考地址:Search trace分析工…

【二分查找】Leetcode 在排序数组中查找元素的第一个和最后一个位置

题目解析 34. 在排序数组中查找元素的第一个和最后一个位置 我们使用暴力方法进行算法演化,寻找一个数字的区间,我们可以顺序查找,记录最终结果 首先数组是有序的,所以使用二分法很好上手,但是我们就仅仅使用上一道题…

第四百四十二回 再谈flutter_launcher_icons包

文章目录 1. 概念介绍2. 使用方法3. 示例代码4. 经验与总结4.1 经验分享4.2 内容总结 我们在上一章回中介绍了"overlay_tooltip简介"相关的内容,本章回中将 再谈flutter_launcher_icons包.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 …

配置vscode链接linux

1.安装 remote SSH 2.按F1 ssh ljh服务器公网ip 3. 选择保存远端host到本地 某位置 等待片刻后 4. 切换到远程资源管理器中 应该可以看到一台电脑,右键在当前窗口链接,输入你的服务器用户密码后电脑变绿说明远程连接成功 5.一定要登陆上云服务器后再…

Day:004(2) | Python爬虫:高效数据抓取的编程技术(数据解析)

正则表达式实战-腾讯新闻 需求: 使用正则获取腾讯新闻标题内容 网站:https://sports.qq.com/ 代码: import reimport requests from fake_useragent import UserAgenturl https://sports.qq.com/ # 构建请求头信息 headers {User-Agent:…

【JavaWeb】Day33.MySQL概述

什么是数据库 数据库:英文为 DataBase,简称DB,它是存储和管理数据的仓库。 像我们日常访问的电商网站京东,企业内部的管理系统OA、ERP、CRM这类的系统,以及大家每天都会刷的头条、抖音类的app,那这些大家所…