2024年Linux最新Linux实战笔记(六) SSH(3),这份333页关于性能优化知识点的PDF你不能不看

最全的Linux教程,Linux从入门到精通

======================

  1. linux从入门到精通(第2版)

  2. Linux系统移植

  3. Linux驱动开发入门与实战

  4. LINUX 系统移植 第2版

  5. Linux开源网络全栈详解 从DPDK到OpenFlow

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  1. 绑定端口:是指客户端上所绑定的端口【重点】
  2. 目标端口:是由服务端进行转发的目标【重点】

一句话概括本地转发的转发链路如下:

客户端绑定的端口收到请求时,通过隧道发送到服务端,再由服务端转发到目标端口【重点】

|--------------|        |--------------|        |-----------|
|  客户端的地址  |------->|  服务端的地址  |------->|  目标地址  |
|  所绑定的端口  |------->|  服务端的端口  |------->|  目标端口  |
|--------------|        |--------------|        |-----------|
                  隧道                     转发

实际怎么做本地转发呢?这里举一个例子:

一般来说,云服务器只默认开放 22 端口,但是假设现在 7777 端口运行着一个服务

如果本地要临时访问,则需先修改防火墙,比较麻烦,这时候就可以配置个本地转发

ssh <云服务器用户>@<云服务器地址> -p 22 -L 127.0.0.1:8888:127.0.0.1:7777

# 以上命令在本地主机执行,此时客户端是本地主机,服务端是云服务器,目标地址是 127.0.0.1,也即云服务器 7777 端口
# 
# 执行之后,本地主机访问 127.0.0.1:8888 即可访问云服务器 7777 端口

# 特别说明,关于绑定地址的设置,通常是 127.0.0.1 或 0.0.0.0
# 
# 如果设置 127.0.0.1,则只允许本机的连接;设置为 0.0.0.0,才会监听所有 IP 的连接
# 
# 因为这里的绑定地址是在客户端,即本地主机,后续接收的请求也是来自本地主机,所以设置为 127.0.0.1 就可以

远程转发则是指将发送到远程端口的请求转发到本地端口,这与本地转发的概念相反

通常用于本地端上存在着某个服务,远程主机想进行访问,命令格式如下:

ssh <服务端用户>@<服务端地址> -p <服务端端口> -R <绑定地址>:<绑定端口>:<目标地址>:<目标端口>

上述命令同样是由客户端负责执行,这点首先要理解清楚

下面还是将该命令拆解成两个部分来分析:

  1. ssh <服务端用户>@<服务端地址> -p <服务端端口>
  2. -R <绑定地址>:<绑定端口>:<目标地址>:<目标端口>

第一部分与本地转发是完全一模一样,先建立客户端与服务端连接的隧道

第二部分是远程转发的关键配置所在,这是与本地转发最大的不同:

  1. 绑定端口:是指服务端上所绑定的端口【重点】
  2. 目标端口:是由客户端进行转发的目标【重点】

一句话概括远程转发的转发链路如下:

服务端绑定的端口收到请求时,通过隧道发送到客户端,再由客户端转发到目标端口【重点】

|--------------|        |--------------|        |-----------|
|  服务端的地址  |------->|  客户端的地址  |------->|  目标地址  |
|  所绑定的端口  |------->|  客户端的端口  |------->|  目标端口  |
|--------------|        |--------------|        |-----------|
                  隧道                     转发

还是举一个例子来说明怎么配置远程转发,这里有一个经典的场景:

假设你需要在家里访问公司内网的服务器,并且你现在有一台外网的服务器,怎么办

很简单,其实就是配置远程转发,这也是我们说的做了个内网穿透

ssh <外网服务器用户>@<外网服务器地址> -R 0.0.0.0.8888:127.0.0.1:22

# 以上命令用内网服务器执行,此时客户端是内网服务器,服务端是外网服务器,目标地址是 127.0.0.1,也即内网服务器 22 端口
# 
# 执行之后,家里的电脑使用 ssh 连接外网服务器 8888 端口,即可连接内网服务器 22 端口

# 需要注意,这里的绑定地址设置是 0.0.0.0
# 
# 因为绑定的地址是服务端,即外网服务器,但后续接收的请求是来自家里电脑,不是同一台主机,所以需要设置为 0.0.0.0
# 
# 这时还要修改服务端上的 ssh 配置文件 `/etc/ssh/sshd\_config`,加上 `GatewayPorts yes`,并重启 sshd 服务后才能生效

最后介绍动态转发,动态转发可以理解成是特殊版的本地转发

通常用于本地主机想访问多个远程端服务或未知的远程端服务,其命令格式如下:

ssh <服务端用户>@<服务端地址> -p <服务端端口> -D <绑定地址>:<绑定端口>

上述命令同样是在客户端执行,也可分为两个部分:

  1. ssh <服务端用户>@<服务端地址> -p <服务端端口>
  2. -D <绑定地址>:<绑定端口>

第一部分与本地转发和远程转发一致,用于建立客户端与服务端之间的连接隧道

第二部分是转发规则的配置,在这里,只需配置绑定端口,而无需配置目标端口

这里的绑定端口是指客户端上的端口,这与本地转发一致【重要】

这里没目标端口,则是因为转发目标由发起的请求所决定【重要】

一句话概括动态转发的转发链路如下:

客户端绑定的端口收到请求时,通过隧道发送到服务端,再由服务端转发该请求

服务端转发的请求就是客户端收到的请求,这样就能达到动态转发的效果啦

例如,客户端收到的请求地址是 hostA: portA,则由服务端转发到 hostA: portA

|--------------|        |--------------|        
|  客户端的地址  |------->|  服务端的地址  |------->  目标地址和目标端口
|  所绑定的端口  |------->|  服务端的端口  |------->  由发起的请求所决定
|--------------|        |--------------|        
                  隧道                     转发

写到这里,不知道大家有没有觉得哪里很奇怪,我们举个例子说:

假设现在本地绑定端口收到请求 <remoteHost>:<remotePort>
然后这个请求通过隧道给服务端
最后再由服务端去转发这个请求 <remoteHost>:<remotePort>,那么 <remoteHost>:<remotePort> 就能收到

这些步骤都没有问题,可问题是 本地主机怎么才能让绑定的端口收到请求 <remoteHost>:<remotePort>

举个具体的例子来说:
假如现在要访问百度,行,那么请求就是 百度地址:80,但是这样请求就直接发出去了,没有到绑定的地址和端口
如果想要到绑定端口也行,那么就只能是 127.0.0.1:绑定端口,这样就能通过隧道给服务端,服务端再去做转发
服务端转发了什么呢?由发起的请求决定 127.0.0.1:绑定端口,实际上就发给了自己,而且端口也是绑定的端口

就是说吧,很奇怪,问题在哪呢?

还是那个:本地主机怎么才能让绑定的端口收到请求 <remoteHost>:<remotePort>

这时就需要我们先在本地主机上设置系统或应用代理

使得发送到本地主机上的请求能先发送到绑定的端口 127.0.0.1:绑定端口

然后再通过隧道发送给服务端,并由服务端进行转发

举例来说,如果要在 macOS  设置系统代理,可参考:官方文档

好了,说了这么多,终于介绍完了三种端口转发模式,总结一下:

模式命令
本地转发ssh <服务端用户>@<服务端地址> -p <服务端端口> -L <客户端绑定地址>:<客户端绑定端口>:<目标地址>:<目标端口>
远程转发ssh <服务端用户>@<服务端地址> -p <服务端端口> -R <服务端绑定地址>:<服务端绑定端口>:<目标地址>:<目标端口>
动态转发ssh <服务端用户>@<服务端地址> -p <服务端端口> -D <客户端绑定地址>:<客户端绑定端口>

无论是哪一种方式,都需要先建立起客户端与服务端的连接隧道

但是这种连接往往不够稳定,所以推荐使用autossh来维护连接

autossh 会对连接进行监听,如果发现连接断开,就会自动重连

使用方法也很简单,只要用 autossh 替换掉 ssh,并加 -M 参数指定监听服务端口即可

autossh <服务端用户>@<服务端地址> -p <服务端端口> -L/-R/-D ... -M <监听服务端口>

当然,为了不用每次重连时都要输入密码,可以设置下免密登录

这点就不用多说了,上面已经有介绍过了

4、文件传输

最后我们介绍 ssh 的另一个应用场景,安全文件传输

为了更方便地使用,这里先推荐一个名为 scp 的工具,全称 Secure Copy

这个工具利用 ssh 实现文件传输和身份认证,用起来很方便

命令格式如下:

scp <source> <target> # 表示从 <source> 传输到 <target>

来举两个例子:

  1. 本地主机上传文件到远程主机
scp <本地主机文件路径> <远程主机用户>@<远程主机地址>:<远程主机目标路径>

# e.g.
# scp /path/to/source user@222.234.133.144:/path/to/target

# 上述命令在 本地主机执行,这里:
# source 为 <本地主机文件路径>
# target 为 <远程主机用户>@<远程主机地址>:<远程主机目标路径>

# 如果上传的是目录,那么需要加上 -r 参数
# 另外可以加上 -P <port> 参数指定远程主机端口

  1. 本地主机从远程主机下载文件
scp <远程主机用户>@<远程主机地址>:<远程主机文件路径> <本地主机目标路径>

# e.g.
# scp user@222.234.133.144:/path/to/source /path/to/target

# 上述命令在本地主机执行,这里:
# source 为 <远程主机用户>@<远程主机地址>:<远程主机文件路径>
# target 为 <本地主机目标路径>

# 如果下载的是目录,那么需要加上 -r 参数
# 另外可以加上 -P <port> 参数指定远程主机端口


好啦,本文到此结束,感谢您的阅读!

如果你觉得这篇文章有需要修改完善的地方,欢迎在评论区留下你宝贵的意见或者建议

为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!

这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。

本份面试集锦涵盖了

  • 174 道运维工程师面试题
  • 128道k8s面试题
  • 108道shell脚本面试题
  • 200道Linux面试题
  • 51道docker面试题
  • 35道Jenkis面试题
  • 78道MongoDB面试题
  • 17道ansible面试题
  • 60道dubbo面试题
  • 53道kafka面试
  • 18道mysql面试题
  • 40道nginx面试题
  • 77道redis面试题
  • 28道zookeeper

总计 1000+ 道面试题, 内容 又全含金量又高

  • 174道运维工程师面试题

1、什么是运维?

2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

3、现在给你三百台服务器,你怎么对他们进行管理?

4、简述raid0 raid1raid5二种工作模式的工作原理及特点

5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

7、Tomcat和Resin有什么区别,工作中你怎么选择?

8、什么是中间件?什么是jdk?

9、讲述一下Tomcat8005、8009、8080三个端口的含义?

10、什么叫CDN?

11、什么叫网站灰度发布?

12、简述DNS进行域名解析的过程?

13、RabbitMQ是什么东西?

14、讲一下Keepalived的工作原理?

15、讲述一下LVS三种模式的工作过程?

16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

17、如何重置mysql root密码?

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

么叫网站灰度发布?

12、简述DNS进行域名解析的过程?

13、RabbitMQ是什么东西?

14、讲一下Keepalived的工作原理?

15、讲述一下LVS三种模式的工作过程?

16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

17、如何重置mysql root密码?

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值