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

相关推荐
嵌入式郑工22 分钟前
LINUX驱动开发: 设备和驱动是怎么匹配的?
linux·运维·服务器
郭式云源生法则2 小时前
归档及压缩、重定向与管道操作和综合使用,find精确查找、find处理查找结果、vim高级使用、vimdiff多文件使用
linux·运维·服务器
一张假钞2 小时前
Ubuntu 24.04 安装 Jenkins
linux·ci/cd·jenkins
tuokuac2 小时前
查看你电脑上某个端口正在被哪个进程占用
linux
MANONGMN3 小时前
Linux 通配符与正则表达式(含实战案例+避坑指南)
linux·运维·正则表达式
带土13 小时前
18 .shell编程-正则表达式
linux·正则表达式
爱吃甜品的糯米团子3 小时前
Linux 学习笔记之进程管理、网络基础与常用软件安装
linux·网络·学习
Micro麦可乐3 小时前
Centos Stream 9 中Docker安装出现 download.docker.com:443 的问题解决
linux·docker·centos·podman
poemyang4 小时前
你的程序为何卡顿?从LINUX I/O三大模式寻找答案
linux·rpc
---学无止境---4 小时前
Linux中早期控制台初始化和注册的实现
linux