拥有 ssh 隧道本身以便从第三台机器进行远程访问

拥有 ssh 隧道本身以便从第三台机器进行远程访问

我正在努力理解以下内容是否以及如何可能。

假设我有一台机器T(目标),我想从远程访问(最好通过ssh)。

T位于路由器/防火墙后面R,我无法将 的端口(例如)转发22到 的R端口。总而言之,无法直接访问。22TsshT

现在说

  • 我有一台A我可以完全控制的机器。

  • 我可以通过 ssh 从TA,即

      T:  ssh user@A
    

    成功了。

问题一:我可以用它来访问Tfrom的 shellA吗?即,我可以使用从Tto创建的连接A来使用TfromA吗?

   T ---> ssh ----> A          # this is possible               

   T <--- ? shell ? <---- A    # is this possible?

问题2:如果Q1是可能的:

假设我有第三台机器L(例如我的笔记本电脑),我的目标是访问Tfrom的 shell L。我可以通过 ssh 隧道A访问L吗?

   T ----> ssh ----> A <---- ssh < ---- L

   T <-------  ?? %&£€ ?? <------- L       # is this possible?

任何帮助表示赞赏。

答案1

这当然是可能的。

Q1:可以通过 ssh 进行反向隧道吗?

是的。以下是有关预留隧道的一些答案:

Q2:可以隧道预留隧道吗?

是的,这基本上是隧道上的 ssh 隧道。以下是关于隧道进入隧道的一些答案:

答案2

我一直这样做,但方向相反。首先建立一条从 T 到 A 上本地主机的反向 SSH 隧道,然后从 L 隧道到 AT 隧道的 A 端,然后使用 ssh 连接到 LA 隧道的本地部分,然后通过 LAT 进行远程连接。

在我的示例中,A 正在侦听端口 22123 上的 ssh 连接。
本地我使用用户名 user,远程则使用 user.name。
我有本地名为 ~/.ssh/A_id_rsa 和 ~/.ssh/T_id_rsa 的密钥,分别作为 user.name 连接到 2 台机器 A 和 T。

这是一个连接 TA 隧道的脚本,应该在 T 上运行。

#!/bin/bash

SSH_KEY =“-i /home/user.name/.ssh/A_id_rsa”
REMOTE_USER="用户名"
GATEWAY_MACHINE="A.domain.com"
GATEWAY_SSH_PORT="22123"

ssh -N -R2201:127.0.0.1:22 -p ${GATEWAY_SSH_PORT} ${SSH_KEY} ${REMOTE_USER}@${GATEWAY_MACHINE}

这是一个连接 LA 隧道的脚本,应该在 L 上运行。

#!/bin/bash

SSH_KEY =“-i /home/user/.ssh/A_id_rsa”
REMOTE_USER="用户名"
GATEWAY_MACHINE="A.domain.com"
GATEWAY_SSH_PORT="22123"

ssh -N -L2201:127.0.0.1:2201 -p ${GATEWAY_SSH_PORT} ${SSH_KEY} ${REMOTE_USER}@${GATEWAY_MACHINE}

然后我将以下内容添加到本地主机的 /etc/hosts 文件中,这样我就可以将隧道的本地端称为 T:-

127.0.0.1 T

然后我有这个脚本,在我们的示例中名为 /usr/local/bin/T 来连接到它

#!/bin/bash

SSH_KEY =“-i /home/user/.ssh/T_id_rsa”
REMOTE_USER="用户名"

ssh -p 2201 ${SSH_KEY} ${REMOTE_USER}@T

TA隧道是反向的,所以-R,LA隧道是本地的,所以-L。脚本中的 -N 阻止他们启动 A 的 shell,所以我通常运行它,或者使用 & 在后台运行它,或者在输入密码后按 ctrl+Z 并运行 bg 来执行它如果我还没有将 A_id_rsa 加载到我的钥匙串中,请解锁它。

相关内容