我正在努力理解以下内容是否以及如何可能。
假设我有一台机器T
(目标),我想从远程访问(最好通过ssh
)。
T
位于路由器/防火墙后面R
,我无法将 的端口(例如)转发22
到 的R
端口。总而言之,无法直接访问。22
T
ssh
T
现在说
我有一台
A
我可以完全控制的机器。我可以通过 ssh 从
T
到A
,即T: ssh user@A
成功了。
问题一:我可以用它来访问T
from的 shellA
吗?即,我可以使用从T
to创建的连接A
来使用T
fromA
吗?
T ---> ssh ----> A # this is possible
T <--- ? shell ? <---- A # is this possible?
问题2:如果Q1是可能的:
假设我有第三台机器L
(例如我的笔记本电脑),我的目标是访问T
from的 shell L
。我可以通过 ssh 隧道A
访问L
吗?
T ----> ssh ----> A <---- ssh < ---- L
T <------- ?? %&£€ ?? <------- L # is this possible?
任何帮助表示赞赏。
答案1
这当然是可能的。
Q1:可以通过 ssh 进行反向隧道吗?
是的。以下是有关预留隧道的一些答案:
- (UL)反向 SSH 隧道如何工作?
- (UL)通过反向 SSH 隧道进行 SFTP?
Q2:可以隧道预留隧道吗?
是的,这基本上是隧道上的 ssh 隧道。以下是关于隧道进入隧道的一些答案:
- (UL)通过 ssh 通过另一台机器建立隧道流量
- (UL)通过另一台机器登录到另一台机器
- (UL)如何在隧道中铺设隧道?
答案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 加载到我的钥匙串中,请解锁它。