Linux:ssh多台设备快速访问

目录

一、背景

由于网络或安全的原因,需要通过跳转机(堡垒机)去访问目标设备时,经常需要反复输入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. 编写配置文件
bash 复制代码
#B设备的ip信息
Host jumper  #给B设备取个别称,随意设置
  HostName 192.168.11.11  #B设备的ip
  User haha    #B设备的用户名
  Port 13988   #访问B设备的端口号,看需要设置

#C设备的ip信息
Host C    #给C设备取个别称,随意设置
  HostName 192.168.10.10  #C设备的ip
  User user   #C设备的用户名
  ProxyJump jumper #连接C设备的中间堡垒机名称,这里是B设备
  1. 拷贝密钥
    1)获取本设备密钥
bash 复制代码
ssh-keygen

一直回车。

2)拷贝密钥

bash 复制代码
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.一步连接

bash 复制代码
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上设置反向隧道:

bash 复制代码
ssh -R remote_port:localhost:local_port remote_user@remote_host
例如,
ssh -v -N -R localhost:8222:localhost:22 B

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

bash 复制代码
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设备上使用如下命令:

bash 复制代码
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的命令如下:

bash 复制代码
ssh -p A_port user_C@localhost
例如,
ssh -p 8222 user@localhost

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

上面技巧二和技巧三需要常驻后台运行,才能保证ssh多设备快速访问,若命令终端窗口关闭了,命令就失效了。以下是常用的命令后台运行的方法:

1.在命令末尾加"&"符号;

2.nohup

bash 复制代码
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,然后释放这两个键,接着按下列出的其他键。

相关推荐
FoldWinCard10 小时前
D5 Linux 网络及端口命令
linux·运维·服务器
零涂毕业设计11 小时前
毕业设计模块开发-OLED显示屏(IIC协议0.96寸)STM32 ESP32 FPGA Linux驱动免费分享
linux·stm32·单片机·嵌入式·esp32·fpga·oled
tedcloud12311 小时前
OmniRoute怎么部署?开源AI模型路由平台Linux部署教程
linux·服务器·人工智能·开源·音视频
霸道流氓气质11 小时前
KMS 密钥管理服务(Key Management Service)原理与实践
linux·服务器·数据库
SakitamaX11 小时前
LVS(Linux Virtual Server)概念详解
linux·运维·lvs
小张同学a.12 小时前
Linux系统管理
linux·运维
阿龙的工作记录12 小时前
深入理解Linux设备驱动模型
linux·嵌入式硬件·工作记录
代码村新手12 小时前
Linux的基本指令
linux·运维·服务器
hkj880813 小时前
Ubuntu 切换java版本
java·linux·ubuntu
撩得Android一次心动14 小时前
Linux编程笔记3【个人用】
linux·笔记