Linux:ssh多台设备快速访问

目录

  • 一、背景
  • 二、技巧
    • 1)技巧一:“跳过”中间堡垒机
    • 2)技巧二:反向访问
    • 3)技巧三:端口转发
    • 4)技巧四:命令后台运行

一、背景

由于网络或安全的原因,需要通过跳转机(堡垒机)去访问目标设备时,经常需要反复输入ip和密码,以下方法可以解决这个痛点。

二、技巧

1)技巧一:“跳过”中间堡垒机

假设现在有3台设备,分别为A,B,C。A可以ssh访问B,B可以ssh访问C,A不能直接ssh访问C。常规做法,在设备
A上ssh到设备B,然后在B设备上再ssh到设备C上,这样就实现了在设备A上访问设备C;这样需要ssh两次,其实可以把中间堡垒机的信息写道ssh的配置文件中(~/.ssh/config ,若没有config文件,就创建这个文件),用别称代替,就可以一步ssh,“跳过“中间的堡垒机,链接目标设备 。以下例子中,期望从设备A直接SSH访问C设备:

  1. 编写配置文件
#B设备的ip信息
Host jumper  #给B设备取个别称,随意设置HostName 192.168.11.11  #B设备的ipUser haha    #B设备的用户名Port 13988   #访问B设备的端口号,看需要设置#C设备的ip信息
Host C    #给C设备取个别称,随意设置HostName 192.168.10.10  #C设备的ipUser user   #C设备的用户名ProxyJump jumper #连接C设备的中间堡垒机名称,这里是B设备
  1. 拷贝密钥
    1)获取本设备密钥
ssh-keygen

一直回车。
2)拷贝密钥

ssh-copy-id [remoteHost]
例如,
ssh-copy-id B
或
ssh-copy-id -p 13988 haha@192.168.11.11

remoteHost为需要远程连接的设备ip或Host(这里是B设备或C设备),会提示需要输入密码,正确输入密码就行。
上述两个命令需要依次在A设备和B设备上执行,将A设备的密钥拷贝给B设备,再将B设备的密钥拷贝给C设备
3.一步连接

ssh [remoteHost]
例如,
ssh C

2)技巧二:反向访问

假设现在有3台设备,分别为A,B,C。A可以ssh访问B,B不能ssh访问C,C设备可以反向ssh访问B设备,故A不能ssh访问C设备。这个时候需要再C设备上建立反向访问隧道给B设备,实现B设备可以访问C设备,然后A设备通过中间设备B访问C设备。接着上面技巧一进行介绍:
在设备C上设置反向隧道:

ssh -R remote_port:localhost:local_port remote_user@remote_host
例如,
ssh -v -N -R localhost:8222:localhost:22 B

然后可以在设备B上通过如下命令访问C设备:

ssh user@localhost -p 8222

让我们拆解这个命令:
ssh: 这是 secure shell 的缩写,是一个加密的网络传输协议,用于远程登录到服务器或在两台计算机之间执行命令。
-v: 这个选项让 SSH 以 verbose 模式执行,即输出详细的调试信息。这对于诊断连接问题非常有用。
-N: 告诉 SSH 不执行任何命令,也就是说这个选项只打开了一个连接,但并没有在远程主机上运行任何命令。
-R: 这个选项设置了一个反向隧道,它让你在本地主机(也就是你执行这个命令的主机)上打开一个端口,并将这个端口连接到远程主机的一个端口上。
localhost:8222:localhost:22: 这个部分指定了隧道的端口转发。它的格式为 [bind_address:]port:host:hostport,其中
localhost:8222 是远程主机(B设备)上的绑定地址和端口,端口可以随意设置未被占用的端口。
localhost:22 是本地主机(C设备)的地址和端口。
B: 这是你要通过 SSH 连接的远程主机。
user:设备C的用户名。
因此,这个命令的整体含义是:在本地主机上开启一个 SSH 连接到远程主机设备B上,并在远程主机设备B上打开端口 8222,将流量转发到本地主机设备C的端口 22(这正好是 SSH 服务的默认端口)。这样,你在设备B上连接到 localhost:8222,实际上就是连接到了执行这个命令的主机的 SSH 服务器。

3)技巧三:端口转发

上面技巧二实现了单向访问设备的反向连接,还不能做到多台设备的快速访问,需要在其基础上再设置端口转发才行。
在A设备上使用如下命令:

ssh -L A_port:localhost:B_port user_B@IP_of_device_B
例如,
ssh -v -N -L localhost:8222:localhost:8222 B

命令解释:
-L: 此选项设置了一个本地端口转发,可以在本地机器上开启指定端口,并将任何发往此端口的数据发送到指定的远程主机和端口。
因为设备B的8222端口与设备C的22端口(ssh默认端口)建立了反向连接,为了方便(少记几个端口),将设备A的8222端口转发到设备B的8222端口,即设备C的22端口,便可以在设备A上直接连接设备C。
在设备A上连接设备C的命令如下:

ssh -p A_port user_C@localhost
例如,
ssh -p 8222 user@localhost

4)技巧四:命令后台运行

上面技巧二和技巧三需要常驻后台运行,才能保证ssh多设备快速访问,若命令终端窗口关闭了,命令就失效了。以下是常用的命令后台运行的方法:
1.在命令末尾加“&”符号;
2.nohup

nohup ssh -v -N -R localhost:8222:localhost:22 B &
nohup ssh -v -N -L localhost:8222:localhost:8222 B &

3.tmux
创建会话窗口:tmux new -s session_name
查看会话列表:tmux list-sessions
会话放入后台:按Ctrl+B和D
恢复会话:tmux attach -t session_name
关闭会话:tmux kill-session -t session_name
tmux快捷键:
tmux 是一个强大的终端多路复用器,它有许多快捷键可以帮助你高效地进行操作。以下是一些常用的快捷键:
Ctrl+b + “%”: 在当前窗口中垂直分割窗格(pane)。
Ctrl+b + ": 在当前窗口中水平分割窗格(pane)。
Ctrl+b + c: 创建一个新的窗口(window)。
Ctrl+b + ,: 重命名当前窗口(window)。
Ctrl+b + o: 在窗格(pane)之间切换。
Ctrl+b + ;: 切换到最近使用的窗格(pane)。
Ctrl+b + 方向键: 在窗格(pane)之间根据方向切换。
Ctrl+b + x: 关闭当前窗格(pane)。
Ctrl+b + &: 关闭当前窗口(window)。
Ctrl+b + l: 回到最近使用的窗口(window)。
Ctrl+b + n/p: 切换到下一个/上一个窗口(window)。
Ctrl+b + [0-9]: 切换到指定编号的窗口(window)。
Ctrl+b + d: 分离当前会话(session)。
需要注意的是,以上的 Ctrl+b 是 tmux 默认的前缀键,这意味着首先需要按 Ctrl+b,然后释放这两个键,接着按下列出的其他键。

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

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

相关文章

C++ —— 内存管理

目录 1. C内存分布 2. C 内存管理方式 2.1 new 和 delete 操作内置类型 2.2 new 和 delete 操作自定义类型 3. operator new与operator delete函数 4. new和delete的实现原理 5. malloc/free 和 new/delete 的区别 1. C内存分布 首先看一段代码: int globalV…

分布式训练遇到问题:NCCL通信相关问题

常见问题: torchrun前面加NCCL_DEBUG=INFO可以查看相关nccl相关错误日志 NCCL_DEBUG=INFO torchrun --nnodes=2 --nproc_per_node=1 --node_rank=0 --master_addr="10.***0.

用Python的turtle库绘制皮卡丘

turtle库的简介 turtle(海龟)库是turtle绘图体系的python实现,turtle库是一种标准库,是python自带的。 turtle(海龟)是一种真实的存在,有一个海龟在窗口的正中心,在画布上游走,走过的轨迹形成了绘制的图形&#xff0…

进阶二叉树

目录 二叉树 二叉搜索树 二叉搜索树的定义 二叉搜索树的操作 哈夫曼树 哈夫曼树的定义 哈夫曼树的构造 哈夫曼树的性质 平衡二叉树 平衡二叉树的定义: 平衡二叉树的插入调整 1.LL插入/LL旋转 2.RR插入/RR旋转 3.LR插入/LR旋转 4.RL插入/RL旋转 二叉树…

仿牛客项目Day10——统一异常处理、记录日志

统一异常处理 在controller里创建advice包,创建ExceptionAdvice类 这个注解括号里面是指只扫描被Controller标注的bean 请求request、响应response、异常exception 普通请求和异步请求的区别在于传的是json还是html吗? 统一记录日志 面向切面编程&…

IO多路复用、域套接字

思维导图 面试题TCP通信中的三次握手和四次: 客户端像向服务器端发送连接请求 服务器应答连接请求 客户端与服务器简历连接 客户端向服务器发送断开请求 服务器应答断开请求 服务器请求关闭连接 客户端发送确认应答 并行和并发的区别: 并行&#xff1a…

外包干了6天,技术明显进步。。。

我是一名大专生,自19年通过校招进入湖南某软件公司以来,便扎根于功能测试岗位,一晃便是近四年的光阴。今年8月,我如梦初醒,意识到长时间待在舒适的环境中,已让我变得不思进取,技术停滞不前。更令…

R语言Meta分析核心技术:从入门到精通

R语言作为一种强大的统计分析和绘图语言,在科研领域发挥着日益重要的作用。其中,Meta分析作为一种整合多个独立研究结果的统计方法,在R语言中得到了广泛的应用。通过R语言进行Meta分析,研究者能够更为准确、全面地评估某一研究问题…

Java毕业设计-基于springboot开发的Java时间管理系统-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、管理员功能模块2、用户功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的Java时间管理系统-毕业论文答…

‘sc‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

问题描述: sc 不是内部或外部命令,也不是可运行的程序 或批处理文件。 通过mysql黑窗口命令 “sc delete 服务名” 删除mysql服务时系统报错:sc不是内部命令或外部命令 原因: 系统默认环境变量值发生变化; 解决&…

从零开始学习typescript系列6: typescript各种类型以及类型特殊使用

基础类型的分类 常用 boolean: 布尔值number: 支持2/8/10/16进制string: 字符串enum: 枚举类型&#xff0c;可根据value找到keyarray: 普通数组&#xff0c;有2种方式&#xff0c;string[]或者 Array<string>tuple: 特殊数组&#xff0c;指定数组里的每个元素的类型&am…

UE snap02 解析ASCII文本文件

UE snap02 解析ASCII文本文件 示例数据data.dat 11389477.2714892 3364559.73645693 0 11389471.5162524 3364567.8860295 0 11389471.5162524 3365813.09618369 0 11388329.6082659 3366184.85895869 0 11388320.4775297 3366197.78833087 0 11388270.6882384 3366214.84811…

爬虫实战-Python爬取百度当天热搜内容

爬虫实战-Python爬取百度当天热搜内容 学习建议学习目标预期内容目标分解热搜地址热搜标题热搜简介热搜指数小总结 代码实现总结 学习建议 本文仅用于学习使用&#xff0c;不做他用&#xff1b;本文仅获取页面的内容&#xff0c;作为学习和对Python知识的了解&#xff0c;不会…

Python从入门到精通秘籍十一

一、Python之自定义模块并导入 在Python中&#xff0c;我们可以自定义模块并将其导入到其他Python程序中使用。自定义模块可以包含函数、类、常量等&#xff0c;便于组织和重用代码。 下面是使用Python代码详细讲解自定义模块的创建和导入的例子&#xff1a; 假设我们有两个…

2040X系列 电子校准件

苏/州/新/利/通 2040X系列 电子校准件 300kHz&#xff5e;67GHz 简述 2040X系列电子校准件包括20402/20403/20404/20405/20409五种型号&#xff0c;覆盖频段300kHz&#xff5e;18GHz/10MHz&#xff5e;26.5GHz/10MHz&#xff5e;50GHz/10MHz&#xff5e;20GHz/10MHz&#xf…

KDD Cup 1999数据集

KDD Cup 1999数据集是一个用于计算机网络入侵检测的经典数据集。该数据集由美国加州大学欧文分校&#xff08;UCI&#xff09;的计算机科学系和加州大学伯克利分校&#xff08;UCB&#xff09;的法律计算机科学研究小组提供&#xff0c;并在1999年的KDD Cup数据挖掘竞赛中使用。…

redis学习-Set集合类型相关命令及特殊情况分析

目录 1. sadd key value1 value2 ... 2. smembers key 3. sismember key value 4. scard key 5. srem key value1 value2 ... 6. srandmember key num 7. spop key num 8. smove key1 key2 value 9. sdiff key1 key2 key3 ... 10. sinter key1 key2 ... 11. sunion key1 key2 .…

Android 11系统启动流程

在Android 11系统启动流程中&#xff0c;系统启动主要经历了以下几个阶段&#xff1a; 引导加载程序&#xff08;Bootloader&#xff09;启动&#xff1a; 当设备加电后&#xff0c;首先运行的是ROM Bootloader&#xff0c;它负责验证操作系统映像的完整性、初始化基本硬件并加…

Acwing1113. 红与黑

Problem: Acwing1113. 红与黑 文章目录 思路解题方法复杂度Code 思路 这是一道经典的洪水填充问题&#xff0c;可以使用dfs搜索和bfs搜索来解决。 ′ . ′ : . : ′.′:表示黑色瓷砖&#xff0c;‘#’:表示红色瓷砖&#xff0c;‘’表示黑色的瓷砖&#xff0c;并且你站在这块瓷…

Unix运维_Unix下配置PHP-7.x.x和Apache-2.x.x

Unix运维_Unix下配置PHP-7.x.x和Apache-2.x.x Apache HTTP Server (简称 Apache, 音译为: 阿帕奇) 是 Apache 软件基金会的一个开放源码的网页服务器。 Apache 源于 NCSAhttpd 服务器, 经过多次修改, 成为世界上最流行的 Web 服务器软件之一。 Apache 可以运行在几乎所有广泛…