ssh是什么_【科普】SSH都不懂,还搞什么网络

关注我,你的眼睛会怀孕

b70f69197eacb11984d647a496149a56.png

今天小编为大家分享一篇关于SSH 的介绍和使用方法的文章。本文从SSH是什么出发,讲述了SSH的基本用法,之后在远程登录、端口转发等多种场景下进行独立的讲述,希望能对大家有所帮助。

1. 什么是SSH?

SSH是一种网络协议,用于计算机之间的加密登录。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。

2. SSH登录原理

2c1c1274e9d7d6c67abf3dbc0abfe3a8.png

3. SSH基本用法

语法:

ssh -p 22 user@host

参数:

-p:指定端口号。

user:登录的用户名。

host:登录的主机。

默认的端口号为22,当端口号为22的时候,可以省略,直接使用如下方式:

ssh user@host

此外,如果本地正在使用的用户名与远程登录的用户名一致,登录用户名也是可以省略的,即如下:

ssh host

4. SSH远程登录实例

现在我有两台linux虚拟机,上面安装都是centOS6.5,ip分别为192.168.13.135和192.168.13.138,如下图:

e4fb1aec829558940eacc0ca58597390.png6dd8ab1fdd9665f147e1be79da101953.png

现在,我需要操作的是通过SSH在192.168.13.138上面,登录到192.168.13.135上面。

首先,我们可以使用如下命令,查看两台机器是否启用了ssh。

netstat -ntlp |grep ssh
3955c11fa4ab7b09424258772c4c9ec2.png

使用如下命令进行连接。

ssh -p 22 root@192.168.13.135

若在本机上是首次登录该远程主机,则会出现如下界面。

cde311c0565ed221aa28d3a0abd7bd28.png

大致意思就是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?输入yes即可。

87a270c46474610f74975634e792eb7e.png

然后输入密码,即可连接ok了。

3013bebd07329a838d71c432db437d8f.png

要想退出,直接输入exit即可。

649d29d870f668b0754481dfe913677f.png

5. SSH端口转发

SSH 不仅仅能够自动加密和解密 SSH 客户端与服务端之间的网络数据,同时,SSH 还能够提供了一个非常有用的功能,那就是端口转发,即将TCP 端口的网络数据,转发到指定的主机某个端口上,在转发的同时会对数据进行相应的加密及解密。如果工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH 的连接,那么也是能够通过使用SSH转发后的端口进行通信。转发,主要分为本地转发与远程转发两种类型。

1. 转发的参数

-C:压缩数据
-f :后台认证用户/密码,通常和-N连用,不用登录到远程主机。
-N :不执行脚本或命令,通常与-f连用。
-g :在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。
-L : 本地端口:目标IP:目标端口
-D : 动态端口转发
-R : 远程端口转发
-T :不分配 TTY 只做代理用
-q :安静模式,不输出 错误/警告 信息

2. 本地转发

有本地网络服务器的某个端口,转发到远程服务器某个端口。说白了就是,将发送到本地端口的请求,转发到目标端口。格式如下:

ssh -L 本地网卡地址:本地端口:目标地址:目标端口 用户@目标地址。

现在我们利用本地转发来解决一个问题,比如我们有两台机器,如下:

centos A(192.168.13.139)

centos B(192.168.13.142)

3f23ebb5bb00ef384311270fd8f6b7e6.png

现在,centos B(192.168.13.142)机器上面安装了mysql,并设置了运行任何主机连接,如下:

3bd03649a6e058d41c44df2110aa4f1c.png

此时,在centos A(192.168.13.139)上面是可以连上centos B(192.168.13.142)的mysql,如下:

15eb8096fe021fa1011001505454723c.png

那么,现在我开始centos B(192.168.13.142)限制不允许外部ip连接,仅仅让127.0.0.1连接,如下:

dbdd21cb66b9ba44f5ab015810ff0dd8.png

此时,centos A(192.168.13.139)上面怎么连接上centos B(192.168.13.142)的mysql呢?

此时,我们还是使用上面的mysql连接方式,肯定会报错,如下:

9cd57ba5fded009189d73ace18252a2c.png

当然在centos B(192.168.13.142)mysql还是可访问的。

bde11f2afa6ce3781637097ba53bc332.png

这个时候,我们就可以使用本地端口转发了,将本地的某个端口,映射到centos B(192.168.13.142)机器上面的,如下:

ssh -L 127.0.0.1:3306:127.0.0.1:3306 root@192.168.13.142

因为本地网卡地址是可以省略的,上面的转发,可以简写为:

ssh -L 3306:127.0.0.1:3306 root@192.168.13.142

当然,ssh连接的时候,若两台机器的用户名相同,也是可以省略的,即命令可以简写为:

ssh -L 3306:127.0.0.1:3306 192.168.13.14

上面的代码就是将本地的3306端口,转发到192.168.13.142的3306端口。因为centos B(192.168.13.142)上面的mysql使用的3606端口。当然,我们首先得看看本地的3306端口是否被占用,如被占用,可以使用其他的端口。

数据流向如图:

058723dee195cf671ee738e275e0b4ca.png

首先,centos A(192.168.13.139)上的应用将数据发送到本地的127.0.0.1上面的3306端口。

然后,centos A(192.168.13.139)将3306端口的数据,通过SSH转发到centos B(192.168.13.142)的3306端口。

接着,centos B(192.168.13.142)将处理后的数据,原路返回给centos A(192.168.13.139)。

如果是首次通过ssh连接cetosB该机器,则会提示确认公钥,并让你选择是否确定连接。

671fae2fee88c40286bf9454a034c562.png

此时,我们在centos A上面连接centos B上面的mysql,就可以这么写了。

bin/mysql -h127.0.0.1 -uroot -p

如下:

baedf2163b3993146eee8d542c020cf7.png

我们可以通过下面命令,在centosA查看ssh转发监听的进程。

32f915bea7ffbd01930a21a681dec8fe.png

3.远程转发

由远程服务器的某个端口,转发到本地网络的服务器某个端口。说白了,就是将发送到远程端口的请求,转发到目标端口。格式如下:

ssh -R 远程网卡地址:远程端口:目标地址:目标端口

下面三台机器为例,如下:

centos A(192.168.13.139)

centos B(192.168.13.142)

win7(10.18.78.135)

假设,win7(10.18.78.135)与centos B(192.168.13.142)不能直接连接,但是win7(10.18.78.135)与centos A(192.168.13.139)可以连接centos B(192.168.13.142)也可以centos A(192.168.13.139)连接,那么,我们就可以在centos A(192.168.13.139)上面使用远程端口转发了,让win7(10.18.78.135)与centos B(192.168.13.142)进行通信。

ssh -R 127.0.0.1:80:10.18.78.135:80 root@192.168.13.142

即centos B(192.168.13.142)监听自己的80端口,然后将所有数据,由centos A(192.168.13.139)发给win7(10.18.78.135)。

6. SSH的远程操作

ssh远程操作,主要用于在远程的机器上面执行某个操作,格式如下:

ssh user@host 'command'

案例1、在机器A(192.168.13.148)中查看机器B(192.168.13.149)的操作系统类型。

在A机器上面执行如下代码:

ssh  dequan@192.168.13.149  'uname -a'

案例2、将机器A(192.168.13.148)中test文件夹复制到B机器(192.168.13.149)。

在A机器上面,执行如下命令:

 tar -cz test | ssh dequan@192.168.13.149 'tar -xz'

当然,我们也可以使用scp命令或rz命令,传输文件。

案例3、在机器A(192.168.13.148)处查看B机器(192.168.13.149)是否监听了1080端口。

在A机器上面,执行如下命令:

ssh dequan@192.168.13.149 'netstat -tln |grep 1080'
a38e959e65760344fb8d0a3a446cbd88.png

7. SSH的本地转发

本地转发,说白了,就是把发到本地的某个端口请求,转发到远程的某台机器上面。格式如下:

ssh -L  [本地地址:]本地端口:远程地址:远程端口 远程用户@远程地址

案例1、在机器B(192.168.13.149)上面访问机器A(192.168.13.148)的服务。

现在,我们在A机器上面,启动了Nginx服务,如下:

24ae2bb743056ddab123c1e9f0c59920.png我们希望B机器也能够这样使用A机器上面的服务。需要把B机器上面80端口请求,转发到A机器上面。目前在B机器这样执行,是报错的,如下:a084c65a46d4fe1e8b014675f0487f0f.png

需要在B机器上面,执行如下代码:

ssh -f -N -L 127.0.01:80:192.168.13.148:80 dequan@192.168.13.148

然后,在B机器上面,访问A机器的服务,就想访问自身的服务一样。b2928bda7d06a8a77302e4ebeca9dbab.png

8. SSH的远程转发

远程转发,即把发给远程机器的某个端口请求,转发到本地的机器上面。格式如下:

ssh -R [远程地址:]远程端口:本地地址:本地端口 远程用户@远程地址

在上面的案例中,我们也可以通过远程转发来实现。即在A机器上面执行如下代码:

sudo ssh -f -N -R 8081:127.0.0.1:80 dequan@192.168.13.149

我们监听了B机器的8081端口,把该端口的请求,转发到A机器上面。

可以在B机器上面看到,我们的监听,如下:

a9e2dc4adfe90672c636aa61be2a05eb.png

此时,执行如下命令,就会被转发到A机器的127.0.0.1的80端口,如下:

bfc0943d142ac08e7a93e83f10ec859c.png

1、利用远程转发,实现代理功能

目前B机器,只能在自己127.0.0.1的80端口监听并转发,如何让B机器作为代理,转发其他机器的请求到A机器上面呢?比如,现在有一台机器C(192.168.13.143),C不能访问A,但是能够访问B。如何让C利用B来访问A呢?

此时,需要将B的监听,由127.0.0.1:8081,改为0:0.0.0:8081,修改sshd的配置/etc/ssh/sshd_config。

 vim /etc/ssh/sshd_config
如果有
GatewayPorts no
改为
GatewayPorts yes
 
没有,添加即可
然后重启sshd

sudo service sshd restart

然后重新,设置动态转发,如下:

 ssh -f -g  -N -R 8081:127.0.0.1:80 dequan@192.168.13.149

可以看到,此时B机器,已经监听了0:0.0.0:8081

1ff8bfc2f2c3c24374ff385e2e50b10a.png

在C机器上面,我们通过curl模拟请求,利用B机器做代理,如下:

 curl -x 192.168.13.149:8081 127.0.0.1
1f9c2d340af44400693866af290f7311.png

当然,如果还有其他机器,也可以使用类似的方式,来请求A机器。

9. SSH的动态转发

对于SSH的本地转发和远程转发,都需要将本地端口和远程端口一一绑定,格式如下:

ssh -D [本地地址:]本地端口号 远程用户@远程地址

比如,把发到B机器上面的请求,都转发到A机器上面,让A机器去执行请求。

10. SSH存在的问题

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

可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的"中间人攻击"(Man-in-the-middle attack)。

11. 总结

本篇文章主要介绍了SSH的基本概念和实践中常用的一些方法,并没有涉及深层原理和优化的知识,在底层实现和协议具体内容还能继续深入研究。如果有什么疑问或建议,可以在下方留言。

1

end

来源:360云计算

年度热文

09d529c35d68b262fb03ba0c3da40674.png

30岁还能入行干网络工程师吗?

人手必备的网络故障排除工具

【干货】救火必备:线上故障排查套路大全

【干货】为什么我的Redis总比别人的慢?

【干货】面试官:网络排错会不会?

【教程】瘦AP升级为胖AP的终极大法

【扎心】到底是谁把路由规划冲突了!

【基础】面试官:你解释一下什么是TCP的固定窗口和滑动窗口

【收藏】用户私自搭建伪服务器怎么办?禁它

【工具】这几款免费的内网监控软件真的绝了,附下载链接

【超详细】模拟器EVE的安装与使用,附下载链接

【干货】一文汇总网络基础知识大全

【必看】2020年最全运维岗位技能风向标!


20413a4b7f9dee5c1673b3534957c045.png

系统集成/认证培训

买设备,找我们

IT维保,找我们

IT培训,找我们

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

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

相关文章

10问10答:你真的了解线程池吗?

简介: 《Java开发手册》中强调,线程资源必须通过线程池提供,而创建线程池必须使用ThreadPoolExecutor。手册主要强调利用线程池避免两个问题,一是线程过渡切换,二是避免请求过多时造成OOM。但是如果参数配置错误&#…

浪潮K1 Power通过ISO/IEC 20243标准认证

日前,浪潮K1 Power服务器通过ISO/IEC 20243标准认证,成为中国第一个通过该认证的服务器产品线。 ISO/IEC 20243标准,也被称为O-TTPS(Open Trusted Technology Provider Standards,开放可信技术供应商标准)…

「技术人生」第3篇:解决问题的规律总结

简介: 本文将介绍问题研究背景及解决问题的一般规律和特殊规律及二者之间的辩证关系。 作者:贺科学 往期技术一号位方法论系列文章: 「技术人生」专题第1篇:什么是技术一号位? 「技术人生」第2篇:学会分…

CENTOS 7 踢用户_CentOS服务器及MySQL数据库性能测试-乐搏软件测试

这期小编和大家分享使用Sysbench,进行CentOS服务器及MySQL数据库的性能测试。Sysbench是一个跨平台的基准测试工具。基准测试是对数据库的性能指标进行定量的、可复现的、可对比的测试。基准测试可以理解为针对系统的一种压力测试。但基准测试不关心业务逻辑更加简单…

何朝曦:构建云化安全能力的三个建议

11月12日,深信服智安全创新峰会在云端拉开帷幕,深信服创始人&CEO何朝曦在《构建云化时代的安全能力》主题演讲中指出,业务云化已成为用户实现数字化转型与变革的重要方式,这种跨时代的变迁对用户的安全能力提出了更高的要求&a…

dubbo-go v3 版本 go module 踩坑记

简介: 该问题源于我们想对 dubbo-go 的 module path 做一次变更,使用 dubbo.apache.org/dubbo-go/v3 替换之前的 github.com/apache/dubbo-go。 作者 | 董剑辉、盛傲飞 来源 | 阿里巴巴云原生公众号 ​ 问题背景 ​ 该问题源于我们想对 dubbo-go 的 mo…

智能数据构建与管理平台Dataphin的前世今生:缘起

简介: 阿里巴巴提出的OneData方法论帮助企业捋清了数据全生命周期的管理思路,更将其植入到产品Dataphin(智能数据构建与管理)中,通过阿里云为企业提供服务。 Dataphin 智能数据构建与管理平台 面向各行各业大数据建设、…

缓存和数据库一致性问题,看这篇就够了

作者 | Magic Kaito来源 | 水滴与银弹如何保证缓存和数据库一致性,这是一个老生常谈的话题了。但很多人对这个问题,依旧有很多疑惑:到底是更新缓存还是删缓存?到底选择先更新数据库,再删除缓存,还是先删除缓…

并联串联混合的电压和电流_高考物理常考实验之电流表改装电压表怎么串联电阻...

​高中物理学习问题与王尚老师答疑​电流表改装电压表怎么串联电阻【问:电流表改装电压表怎么串联电阻?】王尚老师:基本理论是欧姆定律,我举个例子来说这个问题吧。如果是0.3A量程的电流表,改装为最大量程15V的电压表&…

走近Quick Audience,了解消费者运营产品的发展和演变

简介: Quick Audience产品是一款云原生面向消费者的营销产品,自诞生以来,经历了三个发展阶段。每个阶段的转变,都与互联网环境和消费者行为的变迁有着极大的关联。 Quick Audience是云原生的面向消费者的营销平台,涵盖…

php图形验证码接口,php生成图形验证码

[php]代码库<?php session_start();// main$vcodes ;//generate Number 4srand((double) microtime() * 1000000);for ($i 0; $i < 4; $i) {$vcodes . rand(1, 9);}$_SESSION[eifr_checkvcode] $vcodes;if (function_exists(imagecreate)) {//generate picture valid…

边缘应用增长 800%,听听 Akamai 边缘部署的经验

作者 | 宋慧出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;全球权威研究机构都在研究边缘计算的发展进程&#xff0c;并一致认为&#xff0c;企业IT的边缘部署正在加速。其中&#xff0c;IDC研究显示&#xff0c;2023年超过50%的企业新增IT基础设施会部署在…

308 permanent redirect怎么解决_赵县308国道一路口发生一起大货车与电动三轮车碰撞事故,电动三轮车驾驶人受伤。...

原标题&#xff1a;赵县308国道一路口发生一起大货车与电动三轮车碰撞事故&#xff0c;电动三轮车驾驶人受伤。2020年11月4日上午&#xff0c;赵县308国道一路口发生一起大货车与电动三轮车碰撞事故&#xff0c;造成电动三轮车驾驶人受伤。大货车驾驶人驾驶一辆重型货车&#x…

一文带你了解企业上云数据分析首选产品Quick BI

简介&#xff1a; 阿里云Quick BI再度入选&#xff0c;并继续成为该领域唯一入选魔力象限的中国企业&#xff0c;文章将为大家详细介绍上云数据分析首选产品 Quick BI的核心能力。 日前,国际权威分析机构Gartner发布2021年商业智能和分析平台魔力象限报告&#xff0c;阿里云Qu…

如何实现事务原子性?PolarDB原子性深度剖析

简介&#xff1a; 在巍峨的数据库大厦体系中&#xff0c;查询优化器和事务体系是两堵重要的承重墙&#xff0c;二者是如此重要以至于整个数据库体系结构设计中大量的数据结构、机制和特性都是围绕着二者搭建起来的。他们一个负责如何更快的查询到数据&#xff0c;更有效的组织起…

Redis 分布式锁没这么简单,网上大多数都有 bug

作者 | 码哥字节来源 | 码哥字节Redis 分布式锁这个话题似乎烂大街了&#xff0c;不管你是面试还是工作&#xff0c;随处可见&#xff0c;为啥还写&#xff1f;因为看过很多文章没有将分布式锁的各种问题讲明白&#xff0c;所以准备写一篇&#xff0c;也当做自己的学习总结。在…

php 商品展示html,HTML5和CSS3实现3D展示商品信息的代码

这篇文章介绍的是关于html5商品展示导购特效是一款3D立体样式的商品信息&#xff0c;非常具有实用价值&#xff0c;需要的朋友可以参考下。强化下perspective和transform:translateZ的用法。传统的商品展示或许并不能很好的吸引用户的注意力&#xff0c;但是如果在展示中添加适…

asp.net程序涉及案例_定制小程序 | 企业在开发小程序前需要满足哪些条件?

目前深圳小程序开发行业发展愈发迅速&#xff0c;小程序开发已成为目前的潮流趋势&#xff0c;制作属于自己的小程序刻不容缓。那么在开发小程序前&#xff0c;企业需要满足什么条件呢&#xff1f;1、注册账号万纵联小编告诉你&#xff0c;要想开发小程序&#xff0c;申请账号是…

封神-核心功能 | 钉钉告警+数据网关

简介&#xff1a; 封神-核心功能 | 钉钉告警数据网关1. 开发背景 1.1 用户痛点 ①租户侧运维能力弱 问题&#xff1a;租户侧&#xff0c;客户没有有效途径&#xff0c;及时地获取实例级的状态、性能、容量的数据。 现状&#xff1a;每日固定时间&#xff0c;驻场需要人肉收集数…

usleep延时0.毫秒_【进阶】用swoole实现订单的延时处理(自动取消,还原库存等)...

文章正文一、业务场景&#xff1a;当客户下单在指定的时间内如果没有付款&#xff0c;那我们需要将这笔订单取消掉&#xff0c;比如好的处理方法是运用延时取消&#xff0c;很多人首先想到的当然是crontab&#xff0c;这个也行&#xff0c;不过这里我们运用swoole的异步毫秒定时…