SSH基础知识(一)

news2024/11/18 17:20:35

SSH基础知识

    • SSH
      • 对称加密
      • 非对称加密
      • 如何生成秘钥
      • 如何管理秘钥
      • 不同版本
      • ssh命令
        • 安装ssh
        • 启动ssh服务
        • 登录ssh
        • 退出ssh登录
        • 远程登录执行命令
        • ssh参数
      • 端口转发
        • 本地转发
        • 远程转发
        • 动态转发

最近有用到SFTP协议完成一些功能开发,这玩意和FTP比较像,当时以为是升级版,搜索了下,两者并不一样。做个笔记浅记一下。
在了解SFTP前,先了解下SSH。

SSH

SSH 安全外壳协议(Secure Shell),它是通过在不安全的网络中创建一个加密的安全隧道,以保证安全的传输环境。
一些基本概念:

  • 明文:是指客户端和服务器交互时的可读信息,密文解密后可获得
  • 密文:是指对明文加密后的信息
  • 秘钥:用于明文加密、密文解密和完整性校验等所使用的的信息
  • 私钥:私有秘钥
  • 公钥:公有秘钥

对称加密

加密解密使用同一套秘钥,常见算法(AESDES)。优点效率高、速度快;缺点多个客户端就会导致秘钥数目多,且容易泄密,不便管理

非对称加密

在非对称加密中,需要有四个秘钥(服务器公钥、服务器私钥、客户端公钥、客户端私钥)。公钥是对外公开的,秘钥是自己私有的。主要算法RSA.

  • 一个客户端和服务器之间通信产生一对用于加解密的公钥和私钥
  • 服务器的私钥保密,公钥告诉客户端;客户端的私钥保密,公钥告诉服务器
  • 服务器要给客户端发送信息时,服务器用客户端的公钥加密信息,再将加密后的密文发送给客户端
  • 客户端收到这个密文后,用自己的私钥解密该密文。其他所有收到这个报文的人都无法解密,因为只有当前客户端才有自己的私钥
  • 客户端给服务器发消息和上面流程一样
    公钥只能用做数据加密。公钥加密的数据,只能用对应的私钥才能解密。这是非对称加密的核心概念。

如何生成秘钥

可以使用ssh-keygen工具生成秘钥
使用ssh-keygen命令可以生成一对秘钥(公钥、私钥)。一般保存在~/.ssh目录下。
命令常用选项:

-t:指定要创建的密钥类型(rsa、dsa),默认是rsa
-f:指定保存生成的秘钥文件的文件名
-C:添加注释,在公钥文件的末尾;
-b:指定密钥长度,默认2048位
-N password: 指定使用秘钥的密码

执行命令后在~/.ssh目录先会有两个文件(已rsa为例):
id_rsa 是私钥文件
id_rsa.pub 是公钥文件

如何管理秘钥

ssh-agentssh-add 是用于管理私钥的
使用命令如下:

# 启动代理
eval `ssh-agent`
# 关闭代理
ssh-agent -k

# 查看代理中的私钥
ssh-add -l
# 查看代理中私钥对应的公钥
ssh-add -L
# 移除指定的私钥
ssh-add -d pub_key_path(私钥路径)
# 移除所有的私钥
ssh-add -D

不同版本

SSH主要有两大版本SSH1SSH2,两个版本互不兼容。

ssh命令

安装ssh

ssh (SSH 客户端) 用于登录远程主机,并且在远程主机上执行命令.。
要使用ssh,首先要安装客户端(openssh-client)和服务器(openssh-server).

apt-get install openssh-client
apt-get install openssh-server

ssh服务器的配置文件位于/etc/ssh/sshd_config

启动ssh服务

  • 方法一
    /etc/init.d/ssh restart
  • 方法二
    service ssh restart
    查看服务状态:
    service ssh status
    在这里插入图片描述

登录ssh

linux上启动ssh服务后,可以在其他主机上使用ssh远程登录了。
命令格式如下:
ssh username@remote_ip -p port
在这里插入图片描述

退出ssh登录

使用exit即可退出ssh登录
在这里插入图片描述

远程登录执行命令

ssh命令后面添加需要执行的cmd命令,如下所示:
在这里插入图片描述

ssh参数

  • -1、-2:指定SSH1/SSH2协议
  • -4、-6:指定IPV4/IPV6协议
  • -p:指定SSH客户端连接服务器端口
  • -q :安静模式,不向用户输出告警信息
  • -R:指定远程端口转发
    $ ssh -R port:host_sshserver:hostport local
    监听本地port端口,将发向该端口的请求转向服务端的hostport端口
  • -D:动态端口转发
    ssh -D portsshserver
    本地分配了一个 socket 侦听 port 端口,该端口收到的请求,都将转发到远程的 SSH 主机。支持SOCKS4/5协议
  • -L:本地端口转发
  • -N:表示建立的ssh链接只用于端口转发
  • -l:指定远程登录的用户名
  • -i:指定私钥,默认~/.ssh/id_dsa
  • -F:指定配置文件
  • -f: SSH 连接在后台运行
  • -C:数据压缩传输
  • -c:指定加密算法
  • -o:指定配置命令
  • -v:显示过程信息,也可以-vv -vvv
  • -V:显示版本信息

端口转发

本地转发

本地端口转发是指以SSH服务器作为中介建立本地计算机和目标服务器之间的加密连接。
命令格式:
ssh -L local_port:target_addr:target_port tunnel_addr

> -L:本地转发
> lacal_port:本地端口
> target_addr:目标地址
> target_port :目标端口
> tunnel_addr:跳板(隧道)服务器

在这里插入图片描述

如图所示:主机A和服务器B,服务器B和机器C之间可以互相通信,但是主机A无法直接与机器C通信。此时如果需要主机A和机器C通信,就可以使用本地端口转发,以服务器B为跳板访问C服务器。
例如命令如下:

ssh -L [localhost]1000:机器C_addr:8888 服务器B_addr

此处表示,到本地转发端口1000的数据将通过服务器B_addr转发至目标机器C8888端口。此处默认绑定到本地回环地址127.0.0.1。如果需要允许远端主机连接本地转发的端口,可以添加-g选项。命令如下:

ssh -L -g 1000:机器C_addr:8888 服务器B_addr

该命令表示:监听本地端口1000,当有主机连接本地端口1000时,数据将通过服务器B_addr转发至目标机器C8888端口。

远程转发

在这里插入图片描述
如图所示:主机B主机C可以互相通信,主机B可以访问主机A,但是主机A不可以访问主机B。此时如果想让主机A访问主机C就不能使用本地端口转发,因为主机A无法访问主机B主机B就不能作为跳板。
因此此时如果想让主机A访问主机C,可用一下方法:
主机A上启动sshd服务,在主机B上执行远程端口转发,将主机A端口(1000)的数据转发至主机C的指定端口8888,在主机B上执行的命令如下:

ssh -R 1000:C_addr:8888 A_addr

也可以将数据转发至主机B的指定端口:

ssh -R 1000:B_addr:6666 A_addr

上面指令就是将主机A上端口1000接收的数据通过远程端口转发至主机B6666端口。

需要注意的是:默认配置情况下,sshd服务只允许本地开启的远程转发端口(1000)绑定在环回地址(127.0.0.1)上。可通过修改配置文件sshd_config中的GatewayPorts项开启指定地址。

动态转发

以上本地端口转发和远程端口转发,都是静态指定了端口映射的目标主机和目标端口。而ssh也支持动态转发,其工作方式就是将本地端口绑定到ssh服务器上,有服务器去转发,至于转发到哪,取决于原始消息。
主要注意: 动态转发采用了 SOCKS5 协议,其他请求协议需要转换为SOCKS5 协议。

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

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

相关文章

FPGA和CPLD芯片选型介绍(二)

FPGA器件选型(以Xilinx和Altera为例)器件选型是件很严肃的事情,既要考虑性能又要兼顾成本,还要考虑长期供货的稳定性,因此很考验工程师的知识广度储备。一般而言,FPGA(CPLD)需要分三…

3、Maven——Maven创建java web工程,Maven search插件

目录 一、Maven创建java web工程 二、Maven创建java web项目的结构 1、添加项目目录 2、web.xml配置处理报错 三、IDEA更改XML版本 一、Maven创建java web工程 创建Empty Project空工程;右击Empty Project工程--->New--->Module--->Maven Archetype N…

Linux环境下安装软件合集【2】

Linux环境下安装软件合集【2】 Linux环境下安装软件合集【1】 1 安装tomcat 1.1 安装启动tomcat 下载tomcat压缩包 通过wget方式 wget --no-check-certificate https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.70/bin/apache-tomcat-9.0.70.tar.gz直接官网下载压缩包&…

23k入职腾讯测试岗那天,我哭了,这5个月付出的一切总算没有白费~

先说一下自己的个人情况,计算机专业,16年普通二本学校毕业,经历过一些失败的工作经历后,经推荐就进入了华为的测试岗,进去才知道是接了个外包项目,不太稳定的样子,可是刚毕业谁知道什么外包不外…

基于SSH框架的学生成绩管理系统源码+数据库,Struts2、Spring与Hibernate整合应用,实验报告

Struts2、Spring与Hibernate整合应用:基于SSH框架的学生成绩管理系统 最近一个实验课程,需要做一个基于SSH框架的学生成绩管理系统。就简简单单做了一下…… 1.1 实验要求: (1) 整合Struts2、Spring和Hibernate框架 …

​箭头函数和普通函数的区别​

一.外形不同:箭头函数使用箭头定义,普通函数中没有 代码实例如下: // 普通函数 function func(){// code } // 箭头函数 let func()>{// code } 二.箭头函数都是匿名函数 普通函数可以有匿名函数,也可以有具体名函数&#xf…

框架高级课程系列之Redis6笔记

文章目录前言NoSQL数据库简介技术发展NoSQL数据库NoSQL适用场景NoSQL不适用场景Redis概述安装配合关系型数据库做高速缓存多样的数据结构存储持久化数据Redis 安装准备工作:下载安装最新版的gcc编译器启动 Redis方式Redis 关闭方式Redis介绍相关知识常用五大数据类型…

如何利用python机器学习解决空间模拟与时间预测问题及经典案例分析

目录 专题一 机器学习原理与概述 专题二 Python编译工具组合安装教程 专题三 掌握Python语法及常见科学计算方法 专题四 机器学习数据清洗 专题五 机器学习与深度学习方法 专题六 机器学习空间模拟实践操作 专题七 机器学习时间预测实践操作 更多推荐 了解机器学习的发…

Web服务器TomCat快速入门(从安装到部署)

文章目录什么是Web服务器?相关概念基本使用下载安装卸载启动关闭配置部署📂橙子精品文章学习推荐什么是Web服务器? Web 服务器是一个应用程序,对 HTTP 协议的操作进行封装,使得程序员不必直接对协议进行操作&#xff…

【Linux 系统运维基础】Linux命令大全

Linux 命令大全立志列举出Linux中常用的所有命令(有很多命令不使用的话,很快会忘记哦)。 1. cd 目录前进/ 后缀 cd /表示跳转到根目录下,无论是哪个目录下,执行此命令后一定会跳转到根目录下。 cd ~ 表示跳转到主目录下。 cd . 表示跳转还…

【5.2】Nacos注册中心--服务多级存储模型

【【5.2】Nacos注册中心--服务多级存储模型1 Nacos服务多级存储模型2 服务跨集群调用问题3 配置集群属性4 总结1 Nacos服务多级存储模型 之前有服务的概念: 例如:提供用户查询的use-service和提供订单查询的order-service,它们都叫服务。 我…

Linux安装配置JDK安装运行Tomcat

Linux软件主流安装方式: tar:解压安装(前提将安装包下载下来) 安装包格式:tar,tar.gz,tar.bz 安装解压包命令: tar -zxvf 包名xxx rpm:直接安装,需要将安装包下载下来(好比双击window里的.exe文件) 安装包格式:rpm 安装命令:rpm -ivh 软件路径 卸载命令:rpm -e 软件包全名 y…

【GPLT 二阶题目集】L2-014 列车调度

火车站的列车调度铁轨的结构如下图所示。 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车&am…

(蓝桥杯 刷题全集)【备战(蓝桥杯)算法竞赛-第1天】( 从头开始重新做题,记录备战竞赛路上的每一道题 )距离蓝桥杯还有75天

🏆🏆🏆🏆🏆🏆🏆 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录&a…

2023年“华数杯”国际数模赛赛题浅析

2023华数杯如期开赛,本次比赛作为美赛的模拟赛,赛题和比赛时间都和美赛高度相似,因此大家 完全可以当作一次美赛之前的练习赛进行。美赛的发题时间与华数杯一致,都是早晨六点,现已经将机器翻译的初步翻译 结果进行了分…

Gdb调试复现Dirty Pipe漏洞(CVE-2022-0847)之内核态调试

第一、准备环节-增加内核调试辅助语句: 首先,为了更好的查看关键因素的变化:稍微做了两处修改: 第一处:splice前后,增加getchar和puts; 第二处:prepare pipe过程中,增加getchar和puts; 修改后代码执行结…

Spring Bean生命周期,就像人的一生

这篇我们来看一看Spring中Bean的生命周期,我发现,和人的一生真的很像。1 简单说说IoC和BeanIoC,控制反转,想必大家都知道,所谓的控制反转,就是把new对象的权利交给容器,所有的对象都被容器控制&…

利用STC15输出两路互补SPWM波形

利用STC15输出两路互补SPWM波形🎞逻辑分析仪信号采集演示: 🔖本案例使用的是IAP15W4K61S4验证。 📍相关篇《STC15系列PWM相关功能寄存器介绍》 📌相关开源PCB《【PCB开源分享】STC/IAP15W4K61S4开发板》 &#…

Linux(七)进程间通信

进程间是如何进行通信的? 通过前面的学习之后,我们知道进程间是具有独立性的,在操作系统的层面来看,进程就是一块pcb,是对运行中的程序动态运行过程的描述,在Linux角度下,进程就是一个task_stru…

2-2JVM-GC垃圾回收

GC垃圾回收 了解什么是垃圾回收掌握垃圾会回收的常见算法学习串行、并行、并发、G1垃圾收集器学习GC日志的可视化查看 1.什么是垃圾回收? 程序的运行必然需要申请内存资源,无效的对象资源如果不及时处理就会一直占有内存资源,最终将导致内…