SSH 跳板机原理与配置:实现无缝跳板连接,一步直达目标主机

news/2025/1/18 11:56:50/文章来源:https://www.cnblogs.com/deali/p/18678315

前言

在日常运维或开发工作中,我们常常需要访问部署在内网的服务器。然而出于安全策略或网络拓扑的限制,内网服务器并不会直接向外部暴露端口,导致我们无法“直连”它们。此时,跳板机(Jump Host/Bastion Host)就成了必不可少的中转:

  • 先通过 SSH 登录跳板机;
  • 再从跳板机登录到目标服务器。

虽然这样的流程能保证安全隔离,但也带来了一定程度上的不便:我们每次都要进行“两次登录”,甚至手动输入多次密码或在多个终端窗口间切换,非常繁琐。有时还需要在跳板机和目标主机之间频繁复制粘贴命令,效率难免受影响。

那么有没有办法在保持安全的前提下,简化连接流程,实现“一步直达”目标主机?答案是有的。本文将介绍如何通过 SSH 的配置——主要是 ProxyJump-J 参数)或 ProxyCommand,来自动完成“跳板机”这一步骤,让我们在本地一条命令就能直连内网服务器。

背景信息

  • 跳板机(Bastion Host/Jump Host)
    跳板机通常位于受控网络的边缘,是唯一对外开放 SSH/端口访问的安全中转站。外部用户只能通过跳板机登录内网的其他主机,起到了一道安全防护的作用。
  • 二次登录的痛点
    1. 操作繁琐:每次需要 ssh jump-host 登录,再 ssh target-server
    2. 多次输入凭据:如果没有做密钥共享或 SSH Agent 转发,常常要重复输入密码。
    3. 易出错:在多台服务器之间频繁切换,会不小心在错误的终端窗口执行命令。
  • SSH 配置转发的作用
    • 使用 SSH 内置的代理功能,可以让本地 SSH 客户端在连接目标主机时,自动通过跳板机建立隧道,无需手动二次登录。
    • 对用户来说就像直接登录了目标服务器;对网络来说,数据仍会经由跳板机转发,从安全和合规角度依旧满足策略要求。
  • 兼容性与版本要求
    • ProxyJump-J)需要 OpenSSH 7.3+。
    • ProxyCommand 适用于更早版本的 SSH,兼容性更好,但配置稍微复杂一些。

通过这些方法,我们能在“一步到位”登录目标服务器的同时,保持网络和安全策略的完整性。接下来,将结合示例具体说明如何配置和使用。

传统 SSH 二次登录的方式

在传统的 SSH 登录过程中,尤其是在涉及到跳板机的场景下,我们通常需要执行以下两步操作:

  1. 第一步:登录到跳板机
    假设我们已经知道跳板机的地址 jump-server.dealiaxy.com 和开放的端口(如 10023),我们首先通过 SSH 连接到这台跳板机:

    ssh -p 10023 user@jump-server.dealiaxy.com
    

    这时,SSH 客户端会要求我们提供登录凭据(如密码或密钥)。如果我们没有将公钥配置到跳板机上,则需要手动输入密码,或配置 SSH Key 来实现免密登录。

  2. 第二步:从跳板机登录到目标主机
    登录到跳板机后,我们还需要执行第二次 SSH 登录,才能进入目标服务器 target.dealiaxy.com

    ssh user@target.dealiaxy.com
    

    这时,我们再次需要提供目标主机的登录凭据,或者配置 SSH 密钥进行免密登录。如果目标主机和跳板机不在同一网络段,还可能会碰到网络策略或防火墙的问题,导致连接失败。

缺点与痛点

  1. 繁琐的操作步骤:每次都需要输入多次命令,导致操作复杂和耗时。
    • 如果目标服务器在不同的网络环境中,这一操作的步骤可能还会增加,效率更低。
  2. 多次输入凭据:每次都要手动输入密码或 SSH 密钥,容易出错,尤其在密钥管理不当时。
  3. 切换窗口或多任务操作:需要分别打开多个 SSH 会话来管理跳板机和目标服务器,这样会造成界面混乱,尤其在操作复杂时难以管理。

原理简介:SSH 跳板配置

在传统的 SSH 登录过程中,我们需要手动执行两次 SSH 登录操作。这不仅增加了工作量,也可能导致连接的延迟和不必要的重复步骤。那么,如何才能在保证安全性的同时,简化这一流程呢?

答案是通过 SSH 的 跳板机(Jump Host)配置,实现自动化的连接过程。SSH 本身提供了两种主要的方式来处理这种跳板机场景:ProxyJumpProxyCommand。这两种方式都能让我们在一条命令中完成从本地到目标服务器的连接,而不需要手动登录到跳板机。

1. ProxyJump(推荐方式)

从 OpenSSH 7.3 版本开始,SSH 引入了一个新的参数 -J,该参数可以让我们直接指定跳板机。通过使用 -J 参数,我们可以让 SSH 客户端自动先连接到跳板机,再通过跳板机将流量转发到目标主机,完成目标主机的访问。此方法简洁且直接,推荐使用。

示例命令:

ssh -J user@jump-server.dealiaxy.com:10023 user@target.dealiaxy.com

在这条命令中,-J 后面指定了跳板机的地址(user@jump-server.dealiaxy.com)和端口(10023)。SSH 会先与跳板机建立连接,然后通过跳板机转发流量到目标服务器 target.dealiaxy.com。整个过程只需要一次登录操作,极大简化了访问流程。

2. ProxyCommand(兼容性更好)

对于老版本的 SSH 客户端,或者在一些特殊场景下(比如要使用其他协议或更复杂的转发配置),可以使用 ProxyCommand 来实现跳板机配置。ProxyCommand 是 SSH 客户端允许我们定义自定义的命令来建立连接的机制,通过它我们可以指定跳板机的命令。

示例命令:

ssh -o "ProxyCommand ssh -W %h:%p user@jump-server.dealiaxy.com -p 10023" user@target.dealiaxy.com

在这个命令中,-o "ProxyCommand" 选项指定了一个自定义的命令来通过跳板机进行连接。具体地,ssh -W %h:%p 会将目标主机(%h)和端口(%p)转发给跳板机,然后通过跳板机建立与目标主机的连接。

虽然这种方式配置更复杂,但它具有更强的灵活性,支持更多定制化的需求。

通过配置跳板机,我们可以避免每次都手动登录到跳板机再去登录目标主机。无论是 ProxyJump 还是 ProxyCommand,都可以大大简化我们的操作流程,提高效率。ProxyJump 是推荐的方式,因为它更加简洁和易于使用,且适用于大多数现代的 OpenSSH 客户端版本。

在下一节中,我们将详细介绍如何配置这些选项,快速实现无缝的 SSH 跳板连接。

跳板配置方法

方法一:使用 -J(ProxyJump)参数

如前所述,-J 参数是 OpenSSH 7.3 及以上版本提供的一个功能,它允许我们在一条命令中指定跳板机,从而简化了访问内网服务器的过程。相比传统的二次登录方式,使用 -J 参数能够让我们直接通过跳板机登录到目标主机,避免了繁琐的两次 SSH 登录操作。

1. 基本语法

-J 参数的基本语法格式如下:

ssh -J <jump-user>@<jump-host>:<port> <target-user>@<target-host>
  • <jump-user>:跳板机的用户名
  • <jump-host>:跳板机的地址(可以是域名或 IP)
  • <port>:跳板机的端口(默认是 22,可以根据实际情况修改)
  • <target-user>:目标服务器的用户名
  • <target-host>:目标服务器的地址(可以是域名或 IP)

2. 示例命令

假设你已经有了如下的连接信息:

  • 跳板机:jump-server.dealiaxy.com,端口:10023
  • 目标服务器:target.dealiaxy.com
  • 用户名:user

你可以使用如下命令直接通过跳板机连接到目标服务器:

ssh -J user@jump-server.dealiaxy.com:10023 user@target.dealiaxy.com

当你执行这个命令时,SSH 客户端会先与跳板机 jump-server.dealiaxy.com 通过指定的端口(10023)建立连接,然后从跳板机自动转发到目标服务器 target.dealiaxy.com,就像直接登录目标服务器一样。这一过程对用户来说完全透明,你只需提供一次凭据(用户名和密码或 SSH 密钥),即可完成连接。

3. 免密登录

如果你已经配置了 SSH 密钥对并将公钥添加到跳板机和目标主机的授权文件中,使用 -J 参数时,SSH 会自动使用密钥进行身份验证,而无需手动输入密码。例如:

ssh -J user@jump-server.dealiaxy.com:10023 -i /path/to/private_key user@target.dealiaxy.com

这样,你就可以实现完全免密的连接,进一步提高了登录效率。

4. 配置文件中使用 ProxyJump

如果你不想每次都在命令行中手动输入跳板机的地址和端口,可以将 -J 配置写入 SSH 配置文件 ~/.ssh/config。这样,你就能为不同的服务器设置简便的别名和配置,避免重复输入。

~/.ssh/config 文件中,你可以这样配置:

Host target-serverHostName target.dealiaxy.comUser userProxyJump user@jump-server.dealiaxy.com:10023

配置完成后,你只需要执行如下命令即可:

ssh target-server

SSH 会自动根据配置文件中的 ProxyJump 参数,先连接到跳板机 jump-server.dealiaxy.com,再转发到目标服务器 target.dealiaxy.com

5. 优点

  • 简洁高效:通过 -J 参数,SSH 客户端会自动处理跳板机的连接和转发,避免了手动输入两次命令。
  • 支持免密登录:通过配置 SSH 密钥对,可以实现免密登录,进一步提高效率。
  • 配置灵活:可以通过 ~/.ssh/config 文件对多个目标主机设置跳板机配置,简化管理。

这就是使用 -J 参数(ProxyJump)来简化 SSH 跳板机连接的基本方法。它不仅提升了工作效率,还避免了手动输入多次密码或命令的繁琐。如果你的 SSH 版本支持 -J 参数,这无疑是最简单、最直接的解决方案。

方法二:使用 ProxyCommand

在 OpenSSH 7.3 之前,-J 参数尚未出现,SSH 客户端并没有直接支持跳板机的简洁方式。然而,我们可以通过 ProxyCommand 来实现类似的功能,这种方法与 -J 相比,兼容性更好,适用于较旧版本的 SSH 客户端或那些不支持 -J 参数的情况。

ProxyCommand 允许我们指定一个命令来作为跳板机的连接方式,通常我们可以利用 nc(netcat)命令来实现跳板机的连接。通过这种方式,SSH 客户端会在连接目标主机时,先与跳板机建立一个代理连接,然后通过代理连接转发数据流。

1. 基本语法

在 SSH 配置文件中使用 ProxyCommand 的基本语法如下:

Host <target-host>ProxyCommand ssh -q -W %h:%p <jump-user>@<jump-host> -p <port>
  • <target-host>:目标主机的地址,可以是域名或 IP。
  • <jump-user>:跳板机的用户名。
  • <jump-host>:跳板机的地址(可以是域名或 IP)。
  • <port>:跳板机的端口(默认为 22,若有特殊端口需要指定)。
  • %h%p:表示目标主机的主机名和端口,SSH 会在连接时自动替换。

2. 配置示例

为了实现通过跳板机访问目标主机的功能,我们可以将以下配置添加到 SSH 客户端的配置文件中(~/.ssh/config):

Host target.dealiaxy.comProxyCommand ssh -q -W %h:%p user@jump-server.dealiaxy.com -p 10023

这段配置意味着,每次我们尝试连接 target.dealiaxy.com 时,SSH 客户端都会首先通过跳板机 jump-server.dealiaxy.com(端口 10023)建立连接,然后通过跳板机将流量转发到目标服务器。

3. 使用配置后的简化命令

配置好 ProxyCommand 后,我们就不再需要在命令行中指定跳板机和端口。只需要执行如下命令:

ssh user@target.dealiaxy.com

SSH 客户端会自动通过 ProxyCommand 配置连接到跳板机,并将连接转发到目标主机 target.dealiaxy.com,整个过程无需手动指定任何跳板机的参数。

4. 配置文件的灵活性

在使用 ProxyCommand 时,配置文件的灵活性使得我们可以为不同的目标主机配置不同的跳板机。假设你有多个内网目标主机,可以为每个目标主机添加不同的配置:

Host target1.dealiaxy.comProxyCommand ssh -q -W %h:%p user@jump-server.dealiaxy.com -p 10023Host target2.dealiaxy.comProxyCommand ssh -q -W %h:%p user@jump-server.dealiaxy.com -p 10023

这样,在访问不同的目标时,你只需输入相应的主机名(如 ssh user@target1.dealiaxy.com),SSH 客户端会根据配置自动选择跳板机进行连接。

5. 小结

ProxyCommand 提供了一种灵活且兼容性较强的方式,帮助我们在不支持 -J 参数的 SSH 客户端中实现通过跳板机连接目标服务器的功能。尽管这种方法稍显复杂,但它仍然是一种非常有效的解决方案,尤其适合需要在多个环境中使用的用户。


通过这种方式,你可以轻松实现从本地机器通过跳板机连接目标服务器,无需手动登录两次,从而节省了时间并提高了效率。如果你使用的是较老版本的 OpenSSH 客户端,ProxyCommand 无疑是一个很好的替代方案。

进阶:SSH 密钥管理 / 多跳板机

在使用 SSH 连接时,通常推荐使用 SSH 密钥对进行身份验证,而不是使用密码。这不仅能够提高安全性,还能免去每次登录时手动输入密码的麻烦。此外,当涉及到多个跳板机或需要更加复杂的 SSH 配置时,我们还可以通过一些进阶的设置来进一步简化连接过程。

1. SSH 密钥管理

SSH 密钥认证是一种更加安全且方便的身份验证方式。相比密码认证,密钥认证在以下方面具有明显优势:

  • 安全性更高:密码容易被猜测或暴力破解,而 SSH 密钥通过加密算法生成,破解难度更大。
  • 免密登录:配置好公私钥对后,用户可以在不输入密码的情况下自动完成登录。
步骤 1:生成 SSH 密钥对

如果还没有 SSH 密钥对,可以通过以下命令生成:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

这会在 ~/.ssh/ 目录下生成一对公钥(id_rsa.pub)和私钥(id_rsa)。在生成过程中,可以设置密钥的文件名和密码(可选)。

步骤 2:将公钥复制到跳板机和目标主机

为了使密钥认证生效,我们需要将公钥复制到目标主机和跳板机的 ~/.ssh/authorized_keys 文件中。可以使用 ssh-copy-id 命令来自动完成这一操作:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@jump-server.dealiaxy.com
ssh-copy-id -i ~/.ssh/id_rsa.pub user@target.dealiaxy.com

执行完这两条命令后,你就可以通过 SSH 密钥对完成无密码登录。

2. 多跳板机的配置

有时候,我们需要通过多个跳板机(Multi-hop)才能访问目标服务器。在这种情况下,我们可以继续利用 ProxyCommand-J 参数来实现多跳板机的配置。

2.1 使用 -J 参数配置多跳板机

假设我们需要通过两个跳板机才能访问目标服务器,第一台跳板机 jump1.dealiaxy.com 和第二台跳板机 jump2.dealiaxy.com。可以使用如下命令:

ssh -J user@jump1.dealiaxy.com:10023 -J user@jump2.dealiaxy.com:10023 user@target.dealiaxy.com

在这个命令中,SSH 客户端会先连接到 jump1.dealiaxy.com,再从 jump1 转发连接到 jump2.dealiaxy.com,最后通过 jump2 转发到目标服务器 target.dealiaxy.com

2.2 使用 ProxyCommand 配置多跳板机

如果我们使用较老版本的 SSH 客户端,或者更喜欢手动配置 SSH 客户端的设置,可以在 SSH 配置文件(~/.ssh/config)中为多跳板机设置 ProxyCommand。示例如下:

Host target.dealiaxy.comProxyCommand ssh -q -W %h:%p user@jump1.dealiaxy.com -p 10023ProxyCommand ssh -q -W %h:%p user@jump2.dealiaxy.com -p 10023

在此配置中,SSH 客户端首先会通过 jump1.dealiaxy.com 建立连接,再通过 jump2.dealiaxy.com 将流量转发到目标主机 target.dealiaxy.com

3. 配置多个目标主机的密钥

如果你有多个目标主机,并且每个目标主机使用不同的 SSH 密钥进行认证,你可以为不同的主机配置不同的密钥。可以通过 IdentityFile 参数来指定不同的私钥文件。例如,在 SSH 配置文件中,可以为每个主机设置不同的 SSH 密钥:

Host target1.dealiaxy.comIdentityFile ~/.ssh/id_rsa_target1Host target2.dealiaxy.comIdentityFile ~/.ssh/id_rsa_target2

这样,当你连接到 target1.dealiaxy.comtarget2.dealiaxy.com 时,SSH 客户端会自动使用对应的私钥进行认证。

4. 优化连接速度:使用 ControlMaster

在连接过程中,每次与跳板机和目标主机的连接都会涉及到建立新的 SSH 会话。为了提高效率,减少连接延迟,我们可以利用 SSH 的 ControlMaster 功能,通过复用现有的 SSH 会话来加速后续的连接。可以在 SSH 配置文件中添加如下配置:

Host jump-server.dealiaxy.comControlMaster autoControlPath ~/.ssh/cm_socket/%r@%h:%pControlPersist 10mHost target.dealiaxy.comControlMaster autoControlPath ~/.ssh/cm_socket/%r@%h:%pControlPersist 10m

在这个配置中,SSH 会将跳板机和目标主机的连接保持在后台(最多 10 分钟),如果在此时间内重新连接,SSH 会直接复用现有连接,显著减少连接建立的时间。

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

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

相关文章

工具 | MemShellParty

0x00 简介 MemShellParty是一键常见中间件框架内存马生成工具。一键生成常见中间件框架内存马,让内存马测试变得简单高效,打造内存马的全方位学习平台 下载地址: MemShellParty下载: MemShellParty下载 0x01 功能说明TomcatJettyGlassFishPayaraResinSpringMVCSpringWebFlux…

RK3506到底有多香?抢先看核心板详细参数配置

RK3506是瑞芯微Rockchip在2024年第四季度全新推出的入门级芯片平台,三核Cortex-A7+单核Cortex-M0多核异构设计,具备最高-40~85℃的工业宽温性能、发热量小,IO接口丰富, 即时性高, 低延迟, 反应速度快等特点!触觉智能已推出RK3506核心板,抢先了解核心板详细参数配置。产品概…

机器学习基础原理————可解释性LIME原理

More: https://www.big-yellow-j.top/如果⼀个机器学习模型运⾏良好,为什么我们仅仅信任该模型⽽忽略为什么做出特定的决策呢? 诸如分类准确性之类的单⼀指标⽆法完整地描述⼤多数实际任务。当涉及到预测模型时,需要作出权衡:你是只想知道预测是什么?例如,客户流失的概率…

【神兵利器】Windows平台shellcode免杀加载器

项目介绍 免杀,bypassav,免杀框架,nim,shellcode,使用nim编写的shellcode加载器,可快速生成免杀可执行文件 下载地址 Windows平台shellcode免杀加载器下载:Windows平台shellcode免杀加载器下载 项目特点 1:自带四种加载方式 2:可自行拓展加载方式 3:支持两种加密技术…

在电脑上记录工作内容和日记的软件哪款好用?

想要在电脑上随手记录工作内容、日记琐事、待办事项、日程安排等,哪款软件简单好用呢? 今天来介绍四款常用的电脑桌面记事软件,总有一款是你喜欢的? 一、sticky notes Sticky Notes 是 Windows 系统自带的便签工具,也叫 “便笺”。它以彩色便利贴的形式展现在电脑桌面上,…

JAVA安全之JDK8u141版本绕过研究

基本介绍 从JDK8u141开始JEP290中针对RegistryImpl_Skel#dispatch中bind、unbind、rebind操作增加了checkAccess检查,此项检查只允许来源为本地,下面以bind为例: public void dispatch(Remote var1, RemoteCall var2, int var3, long var4) throws Exception {if (var4 != 4…

漏洞预警 | Apache NiFi信息泄露漏洞

0x00 漏洞编号CVE-2024-565120x01 危险等级中危0x02 漏洞概述 Apache NiFi是一个强大的、易于使用的数据集成平台,旨在自动化和管理数据流,尤其是在大数据环境中。0x03 漏洞详情CVE-2024-56512漏洞类型:信息泄露 影响:获取敏感信息 简述:Apache NiFi的/nifi-api/flow/proc…

漏洞预警 | Netis Wifi路由器信息泄露漏洞

0x00 漏洞编号CVE-2024-484550x01 危险等级高危0x02 漏洞概述 Netis Wi-Fi路由器以其稳定的性能、易用的管理界面以及较高的性价比受到许多用户的青睐。0x03 漏洞详情CVE-2024-48455漏洞类型:信息泄露 影响:获取敏感信息 简述:Netis Wi-Fi路由器的/cgi-bin/skk_get.cgi接口存…

漏洞预警 | 明源地产ERP SQL注入漏洞

0x00 漏洞编号暂无0x01 危险等级高危0x02 漏洞概述 明源地产ERP是一款专为房地产行业设计的企业资源计划管理系统,致力于为房地产开发企业提供全面的管理解决方案。0x03 漏洞详情 漏洞类型:SQL注入 影响:获取敏感信息 简述:明源地产ERP系统的X-Forwarded-For头部存在SQL注入…

多项式算法初探:从 FFT 到 FWT(目前只有FFT)

多项式一向是算法竞赛中相当博大精深的东西,作为一个蒟蒻,我将会以最大的努力完成这篇记录,以防自己以后看不懂qwq。FFT(快速傅里叶变换) FFT 是一种可以在 \(O(n\log n)\) 的时间内完成多项式乘法的算法。这个算法的劣势在于精度。 我将会从复数、DFT、FFT 和 IFFT 四个部分…

漏洞预警 | WordPress Plugin Radio Player SSRF漏洞

0x00 漏洞编号CVE-2024-543850x01 危险等级高危0x02 漏洞概述 WordPress插件Radio Player是一种简单而有效的解决方案,用于将实时流媒体音频添加到您的WordPress网站。0x03 漏洞详情CVE-2024-54385漏洞类型:SSRF 影响:获取敏感信息 简述:Radio Player的/wp-admin/admin-aja…