从服务器通过其他服务器的SSH连接(A-> B-> C)

我有3台服务器,可以称它们为A,B和C.

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

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

问题是我不能更改服务器A上的命令,这可能只是一个简单的SSH用户@ B。

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

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

每当A与Bbuild立连接时,我可以看到与Cbuild立了连接,但是A似乎没有意识到这一点和超时。

我试图添加选项-t,-t -t,-T或-N到ssh命令,但无济于事。 有没有办法以服务器A认为他正在与服务器B进行通信的方式向前发送ssh连接?

B和C之间的连接需要在A连接B时触发,Aclosures连接时closures。

所有validation都是使用密钥完成的。

[编辑]

澄清:我无法控制服务器A上的命令,但现在,A连接到B,然后B打开连接到C.这里的问题是dat A不能识别新的连接。 我认为它没有得到一个提示或东西,所以A知道有一个连接。

如果我手动使用此设置

 ssh user@B 

它的工作,我直接login在C

你正在寻找的是一个SSH隧道。

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

这连接到服务器B,直接与-f背景,然后打开本地主机上的端口2000与L 所有发送到本地主机上的这个端口的东西都被转发到C端口22上。所以一旦你input了这个命令,你就可以做到了

 ssh localhost -p 2000 

哪个会把你连接到C.

更新

看来我误解了你,对不起。 如果你不能改变A上的命令,你仍然可以通过改变用户的~/.bashrc来指定在login时应该发生什么。

在服务器B中用户的主目录中,为了运行第二个ssh userc@hostC最后一行添加到文件~/.login (或者创build它,如果它不存在)。

请不要使用~/.bashrc :前者在login后使用,后者用于每个bash的执行,甚至是以#!/bin/bash开头的脚本。