更新

更新

我有 3 台服务器,我们分别称之为 A、B 和 C

服务器 C 位于防火墙后面,只有服务器 B 可以连接到它。服务器 B 和 C 在我的控制之下。

现在我想让服务器 A 通过服务器 B 连接到服务器 C:A -> B -> C

问题是我无法更改服务器 A 上的命令,它可能只是一个简单的 ssh 用户@B。

我正在尝试使用authorized_keys中的命令选项转发传入连接:

command="ssh user@C" ssh-rsa KEY

每当 A 与 B 建立连接时,我都能看到与 C 建立了连接,但 A 似乎没有意识到这一点并且超时。

我尝试在 ssh 命令中添加选项 -t、-t -t、-T 或 -N,但无济于事。有没有办法转发 ssh 连接,让服务器 A 认为它正在与服务器 B 通信。

当A与B建立连接时需要触发B和C之间的连接,当A关闭连接时也需要关闭B和C之间的连接。

所有身份验证均使用密钥完成。

[编辑]

澄清一下:我无法控制服务器 A 上的命令,但现在,A 确实连接到 B,然后 B 打开与 C 的连接。这里的问题是 A 无法识别该新连接。我认为它没有收到提示或其他信息,因此 A 不知道存在连接。

如果我手动使用此设置

ssh user@B

它有效并且我直接在 C 登录。

答案1

您正在寻找的是 SSH 隧道。

ssh -f user@B -L 2000:C:22

这将连接到服务器 B,直接进入后台-f,然后使用 在本地主机上打开端口 2000。L发送到本地主机上此端口的所有内容都将转发到 C 上的端口 22。因此,输入此命令后,您可以执行

ssh localhost -p 2000

它将连接你到 C。

更新

看来我误解你了,抱歉。如果你无法更改 A 上的命令,你仍然可以通过更改~/.bashrc用户的 来指定登录时应发生的情况。

答案2

在服务器 B 中用户的主目录中,您需要向文件添加最后一行~/.login(如果不存在则创建它)以运行第二个ssh userc@hostC

请不要使用~/.bashrc:前者在登录后使用,而后者用于每次 bash 执行,即使是以 开头的脚本中的执行#!/bin/bash

相关内容