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

相关推荐
知北游天5 分钟前
Linux:多线程---深入互斥&&浅谈同步
linux·运维·服务器
Gappsong8747 分钟前
【Linux学习】Linux安装并配置Redis
java·linux·运维·网络安全
try2find41 分钟前
移动conda虚拟环境的安装目录
linux·运维·conda
码农101号1 小时前
Linux中容器文件操作和数据卷使用以及目录挂载
linux·运维·服务器
PanZonghui1 小时前
Centos项目部署之Nginx 的安装与卸载
linux·nginx
PanZonghui1 小时前
Centos项目部署之安装数据库MySQL8
linux·后端·mysql
PanZonghui2 小时前
Centos项目部署之运行SpringBoot打包后的jar文件
linux·spring boot
PanZonghui2 小时前
Centos项目部署之Java安装与配置
java·linux
程序员弘羽2 小时前
Linux进程管理:从基础到实战
linux·运维·服务器
PanZonghui2 小时前
Centos项目部署之常用操作命令
linux